Junit正面和负面测试

时间:2013-03-21 10:14:32

标签: java unit-testing junit

我有一项任务,我需要为我的代码创建一些测试。我们必须使用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);
}

对此有否定的测试吗?

3 个答案:

答案 0 :(得分:3)

入口类公共构造函数应该有一些参数验证,例如name不能为null。所以你可以像这样写一个负面的测试

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

请注意我使用了JUnit 4

答案 1 :(得分:2)

我认为,testEntryCreated测试已经没有必要了。您不是在测试类的行为,而是测试JVM正确创建对象的能力。相反,要专注于测试对象的行为方式。

答案 2 :(得分:0)

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

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

您的否定测试示例如下:

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
} 

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