2016-03-11 3 views
1

Я хочу проверить, вызван ли конкретный конструктор определенным набором параметров и проверить правильность параметров.PowerMockito проверяет вызов конструктора произвольного числа

Класс использует произвольные параметры Java (...), как это:

public class MyClass{ 
    public MyClass(Object o, int... params){ 
     //DOSOMETHING 
    } 
} 

Класс испытуемый имеет метод, сделать это:

@RunWith(PowerMockRunner.class) @PrepareForTest(MyClass.class) 
public class ClassUnderTest { 
    private int[] par; 
    public ClassUnderTest(int... params){ 
     this.par = params; 
    } 

    public MyClass methodToTest(){ 
     return new MyClass(null, this.par); 
    } 
} 

Я хочу, чтобы проверить, что возвращенный MyClass был вызван с правильными аграментами.

То, что я сделал это:

whenNew(MyClass.class).withAnyArguments().thenReturn(null); 

ClassUnderTest clazz = new ClassUnderTest(0, 1, 2); 
MyClass res = clazz.methodToTest(); 
verifyNew(MyClass.class).withArguments(eq(null), any(int[].class)); 

Но не работает с этой ошибкой:

java.lang.AssertionError: Wanted but not invoked my.package.MyClass(
    null, 
    <any> 
); 
Actually, there were zero interactions with this mock. 

Есть ли у вас какие-либо предложения или идеи, как проверить это, я хотел бы избежать использования getters MyClass .....

+0

Могу ли я спросить, почему ** ** Вы хотели бы избежать просто проверить состояние из MyClass после его создания? Все это выглядит довольно просто, только эти требования приводят вас к необходимости PowerMockito вообще ... (и это, как правило, решение проблем, которые вам не нужны). –

+0

Я думал, что это должно работать: 'verifyNew (MyClass.class) .withArguments (eq (null), Matchers. anyVararg());', но ни один. Вероятно, это ошибка ... Так же, как и в отношении удобства, он не ответил на ваш вопрос вообще, это работает: 'verifyNew (MyClass.class) .withArguments (eq (null), anyInt(), anyInt(), anyInt()); '. Я буду ждать ответов – troig

ответ

0

Я решил проблему только для подготовки к тестированию класса, который я тестировал, поэтому я сделал:

@PrepareForTest(ClassUnderTest.class) 

вместо

@PrepareForTest(MyClass.class) 

понедельник, если у меня будет свободное время я опубликую более подробный ответ

Смежные вопросы