2016-06-16 3 views
-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... 

} 

Что вполне некрасиво. Что является лучшим решением?

+0

Для вашего метода getParameters вам нужно вернуть коллекцию 'Object'? Вы можете просто изменить свой массив на «», чтобы избежать того, что вы делаете в конструкторе. –

+0

Я делаю это, чтобы определить, какой Impl является 'i' – LiLou1

+0

Да, но поскольку они оба наследуют методы MyInterface, вам, вероятно, не нужно. Если вам нужно проверить методы, которые имеет «MyInterface», вы можете вызвать массив объектов «MyInterface» без трансляции. Вам понадобится только cast * if *, у реализации есть другие уникальные имена методов, и вам также нужно их протестировать. –

ответ

0
@RunWith(Parameterized.class) 
public class ServiceLocator1Test { 

    private MyInterface i; 

    public MyInterfaceTest(MyInterface i) { 
     this.i = i; 
    } 


    @Parameterized.Parameters 
    public static Collection<Object[]> getParameters() 
    { 
     MyInterface a = new ImplA(); setup(a); 
     MyInterface b = new ImplB(); setup(b); 

     return Arrays.asList(new Object[][] { 
       { a }, 
       { b } 
     }); 
    } 

    //tets... 

} 

private static void setup(MyInterface myinterface){/*...*/} 
Смежные вопросы