Chcę uruchomić te same testy JUnit dla różnych implementacji interfejsu. Znalazłem ładne rozwiązanie z opcji @Parameter:Testowanie implementacji wielu interfejsów z tymi samymi testami - JUnit4
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() }
});
}
}
Ten test będzie prowadzony dwukrotnie, najpierw z GoodInterfaceImpl następnie z AnotherInterfaceImpl klasie. Ale problem polega na tym, że większość testcases potrzebuje nowego obiektu. Uproszczony przykład:
@Test
public void isEmptyTest(){
assertTrue(interface.isEmpty());
}
@Test
public void insertTest(){
interface.insert(new Object());
assertFalse(interface.isEmpty());
}
Jeśli isEmptyTest prowadzony jest po insertTest zawiedzie.
Czy istnieje opcja automatycznego uruchamiania każdej wersji testowej z nową instancją implementacji?
BTW: Wdrożenie clear() lub reset() -method dla interfejsu nie jest tak naprawdę opcje ponieważ nie musiałby go w kodzie produkcyjnym.
Proponuję patrząc wstrzykiwania zależności. Oto mały artykuł na temat tego, jak wykorzystać go do osiągnięcia dokładnie tego, czego szukasz http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html –
Dziękuję za szybką odpowiedź ! W tym artykule opisano sposób dzielenia zależności w interfejsie. Chcę przetestować interfejs (a nie klasę, która używa interfejsu lub mówić w kategoriach artykułu: chcę przetestować farmę zdalną [odpowiednio silniki], a nie serwlet farmy [odpowiednio samochody]). –