我想检查是否使用一组params调用了一个特定的构造函数,并检查params是否正确。
该类使用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是否实际上是使用正确的agruments调用的。
我做的是:
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.
你有任何建议或想法如何测试这个,我想避免使用MyClass的getter ......
答案 0 :(得分:1)
我解决了问题,只是在PrepForTest我正在测试的类,所以我做了:
@PrepareForTest(ClassUnderTest.class)
而不是
@PrepareForTest(MyClass.class)
星期一,如果我有空闲时间,我会发布更详细的答案