【发布时间】:2013-03-20 03:10:32
【问题描述】:
我是编写单元测试的新手,在为以下场景编写测试用例时遇到了困难:
Class A
{
public B createB(string name);
public B getB(string name);
public void removeB(B instance);
}
Class B
{
public B(string name);
}
如果特定名称的B 实例已经存在,则方法createB() 将返回null。因此,为了测试案例createB() 是否成功完成,我必须调用getB() 来检查它是否存在,然后removeB() 将其删除:
A a = getInstanceOfA();
public void testCreateB()
{
B b = a.getB("B");
if (b != null)
{
a.removeB(b);
}
assertNotNull(a.createB("B"));
}
这违反了“一个测试用例必须只有一个原因失败”的规则,如果测试失败,我不知道问题出在哪里。测试getB() 方法也是一样,必须调用createB() 作为开始测试的先决条件。我正在使用 JUnit,每次开始测试时测试用例都会被打乱。是否有任何最佳实践来确保在这种情况下隔离测试用例?
另外请注意,getInstanceOfA() 方法是从另一个库提供的 API 调用,无法控制获得 A 的“干净”实例。
【问题讨论】:
标签: java unit-testing junit4 method-group