1

我有一个任务,我需要为我的代码创建一些测试。我们必须使用 Junit 测试,所以我决定对我的方法进行正面和负面测试。

例如,一项从 ArrayList 获取名称的测试我有正面和负面的测试:

积极的:

public void testGetNamePositive() { 
    Entry entry1 = new Entry("Susan Holmes", "122 Harringdale", "Workington", "CA14 2GH"); 
    assertEquals("Susan Holmes",entry1.getName()); 
} 

消极的:

public void testGetNameNegative() { 
    Entry entry1 = new Entry("Susan Holmes", "122 Harringdale", "Workington", "CA14 2GH"); 
    assertFalse( entry1.getName() == "Alison"); 
} 

我不确定的测试是这个:

public void testEntryCreated() {
    Entry entry1 = new Entry("Susan Holmes", "122 Harringdale", "Workington", "CA14 2GH");
    assertNotNull(entry1);
}

对此有负面测试吗?

4

3 回答 3

4

入口类公共构造函数应该有一些参数验证,例如名称不能为空。所以你可以像这样写一个否定测试

@Test(expected = NullPointerException.class)
public void testCreateEntryWithNameIsNullThrowsNPE() {
    Entry entry1 = new Entry(null, "122 Harringdale", "Workington",
            "CA14 2GH");
}

请注意,我使用了 JUnit 4

于 2013-03-21T10:25:57.503 回答
3

我会争辩说,testEntryCreated测试已经没有必要了。您在这里不是测试类的行为,而是测试 JVM 正确创建对象的能力。相反,应专注于测试您希望对象的行为方式。

于 2013-03-21T10:26:18.340 回答
1

我不太确定您要在这里测试什么。您当前正在测试的只是名称变量设置正确。

当您进行单元测试时,您希望使用负输入和正输入单独测试特定方法(最小的可测试单元)。

您的否定测试示例如下:

public void testGetNameNegative() 

{ 
    Entry entry1 = new Entry("Susan Holmes", "122 Harringdale", "Workington", "CA14 2GH"); 
    assertFalse( entry1.getName() == "Alison"); 
} 

这不是一个负面的测试用例。例如,您想测试的是否为负的名称不能包含数字或空字符串:

public void testGetNameNegative() 

{ 
    Entry entry1 = new Entry("123", "122 Harringdale", "Workington", "CA14 2GH"); 
    //Expect some behaviour
    Entry entry1 = new Entry("", "122 Harringdale", "Workington", "CA14 2GH"); 
    //Expect some other behavior
} 

您在这里所期望的可能是某种异常,因为您正在“测试”构造函数。如果这是一种方法,您可能会期望某种返回值而不是异常

于 2013-03-21T10:29:01.477 回答