我有一项任务,我需要为我的代码创建一些测试。我们必须使用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);
}
对此有否定的测试吗?
答案 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
}
您在这里期望的可能是某种异常,因为您正在“测试”构造函数。如果这是一种方法,你可以期待某种返回值而不是异常