-1
У меня есть 2 конкретных класса, которые реализуют один и тот же интерфейс. Существуют те же тесты, что и для обоих, поэтому я хочу выполнить 1 тест класса Parameterized. В классах требуют, чтобы быть настроены изначально только один раз (с той же установкой), так что это мой обходной путь:Как начать настройку в параметризованном классе?
@RunWith(Parameterized.class)
public class MyInterfaceTest {
private MyInterface i;
private static boolean setupDone[] = new boolean[2]; //this is ugly
public MyInterfaceTest(MyInterface i) {
this.i = i;
if(i instanceof ImplA && !setupDone[0]){
setup();
setupDone[0] = true;
}else if(i instanceof ImplB && !setupDone[1]){
setup();
setupDone[1] = true;
}
//must add code here for more Impl -> ugly
}
@Parameterized.Parameters
public static Collection<Object[]> getParameters()
{
return Arrays.asList(new Object[][] {
{ new ImplA() },
{ new ImplB() }
});
}
//tets...
}
Что вполне некрасиво. Что является лучшим решением?
Для вашего метода getParameters вам нужно вернуть коллекцию 'Object'? Вы можете просто изменить свой массив на «», чтобы избежать того, что вы делаете в конструкторе. –
Я делаю это, чтобы определить, какой Impl является 'i' – LiLou1
Да, но поскольку они оба наследуют методы MyInterface, вам, вероятно, не нужно. Если вам нужно проверить методы, которые имеет «MyInterface», вы можете вызвать массив объектов «MyInterface» без трансляции. Вам понадобится только cast * if *, у реализации есть другие уникальные имена методов, и вам также нужно их протестировать. –