我想为不同的接口实现运行相同的 JUnit 测试。我用@Parameter选项找到了一个不错的解决方案:
public class InterfaceTest{
MyInterface interface;
public InterfaceTest(MyInterface interface) {
this.interface = interface;
}
@Parameters
public static Collection<Object[]> getParameters()
{
return Arrays.asList(new Object[][] {
{ new GoodInterfaceImpl() },
{ new AnotherInterfaceImpl() }
});
}
}
该测试将运行两次,首先使用GoodInterfaceImpl,然后使用AnotherInterfaceImpl类。但问题是大多数测试用例都需要一个新对象。一个简化的例子:
@Test
public void isEmptyTest(){
assertTrue(interface.isEmpty());
}
@Test
public void insertTest(){
interface.insert(new Object());
assertFalse(interface.isEmpty());
}
如果isEmptyTest在insertTest之后运行,它会失败。
是否可以选择使用新的实现实例自动运行每个测试用例?
顺便说一句:为接口实现clear()或reset()方法并不是一个真正的选择,因为我在生产代码中不需要它。