PowerMockito 验证任意数字参数构造函数调用
PowerMockito verify a arbitrary number param constructor call
我想检查是否使用特定的一组参数调用了特定的构造函数,并检查参数是否正确。
class 像这样使用 java ( ... ) 的任意参数:
public class MyClass{
public MyClass(Object o, int... params){
//DOSOMETHING
}
}
正在测试的 class 有一个方法可以做到这一点:
@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.
你有什么建议或想法如何测试这个,我想避免使用 MyClass 的 getters.....
我只是 PreparingForTest 我正在测试的 class 就解决了这个问题,所以我做了:
@PrepareForTest(ClassUnderTest.class)
而不是
@PrepareForTest(MyClass.class)
周一如果有空我会post更详细的回答
我想检查是否使用特定的一组参数调用了特定的构造函数,并检查参数是否正确。
class 像这样使用 java ( ... ) 的任意参数:
public class MyClass{
public MyClass(Object o, int... params){
//DOSOMETHING
}
}
正在测试的 class 有一个方法可以做到这一点:
@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.
你有什么建议或想法如何测试这个,我想避免使用 MyClass 的 getters.....
我只是 PreparingForTest 我正在测试的 class 就解决了这个问题,所以我做了:
@PrepareForTest(ClassUnderTest.class)
而不是
@PrepareForTest(MyClass.class)
周一如果有空我会post更详细的回答