2016-03-11 80 views
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的獲得者.....

+0

請問** **爲什麼你想避免簡單地檢查狀態創建它後MyClass的?整個事情看起來很簡單,只有這些需求導致你需要PowerMockito ......(它往往是你不需要的問題的解決方案)。 –

+0

我認爲這應該工作:'verifyNew(MyClass.class).withArguments(eq(null),Matchers。 anyVararg());',但都沒有。可能它是一個bug ...就像一個couriosity一樣,altought它根本不回答你的問題,這是有效的:'verifyNew(MyClass.class).withArguments(eq(null),anyInt(),anyInt(),anyInt ());'。我會等待答案 – troig

回答

0

我解決了這個問題只是PreparingForTest我正在測試的類,所以我做了:

@PrepareForTest(ClassUnderTest.class) 

,而不是

@PrepareForTest(MyClass.class) 

週一如果我有一些空閒時間,我將發佈更詳細的解答

相關問題