異なるインターフェース実装に対して同じ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() }
});
}
}
このテストは2回実行されます。最初はGoodInterfaceImplを使用し、次にAnotherInterfaceImplクラスを使用します。しかし、問題は、ほとんどのテストケースに新しいオブジェクトが必要なことです。簡単な例:
@Test
public void isEmptyTest(){
assertTrue(interface.isEmpty());
}
@Test
public void insertTest(){
interface.insert(new Object());
assertFalse(interface.isEmpty());
}
insertTestの後にisEmptyTestを実行すると、失敗します。
実装の新しいインスタンスで各テストケースを自動的に実行するオプションはありますか?
ところで:インターフェイスにclear()またはreset()メソッドを実装することは、生産的なコードでは必要ないため、実際にはオプションではありません。