1
我想檢查一個特定的構造函數是否被一組params調用,並檢查參數是否正確。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.
你有任何建議或想法如何測試這一點,我想盡量避免使用MyClass的獲得者.....
請問** **爲什麼你想避免簡單地檢查狀態創建它後MyClass的?整個事情看起來很簡單,只有這些需求導致你需要PowerMockito ......(它往往是你不需要的問題的解決方案)。 –
我認爲這應該工作:'verifyNew(MyClass.class).withArguments(eq(null),Matchers。 anyVararg());',但都沒有。可能它是一個bug ...就像一個couriosity一樣,altought它根本不回答你的問題,這是有效的:'verifyNew(MyClass.class).withArguments(eq(null),anyInt(),anyInt(),anyInt ());'。我會等待答案 –
troig