2014-05-12 156 views
2

我想在類中只模擬一個靜態方法,所有其他方法應該像真實對象一樣工作。PowerMockito。模擬靜態方法。爲什麼PowerMockito#stub不工作?

代碼:

public class ArrTest { 

    public static int myMethod (int arr []) {   
     return 777; 
    } 
} 

測試此方法:

public class ArrTestTest { 
    @Test 
    public void myMethodTest(){   
     PowerMockito.stub(PowerMockito.method(ArrTest.class, "myMethod")).toReturn(0); 
     System.out.println(ArrTest.myMethod(null)); 
    } 
} 

在輸出I見777,但我想看0;

我該怎麼做?

回答

5

你的做法是正確的,但是你錯過了註釋,使PowerMockito儀器類,並使用相應的測試運行:

@PrepareForTest(ArrTest.class) 
@RunWith(PowerMockRunner.class) 
public class ArrTestTest { 
    @Test 
    public void myMethodTest(){ 
     PowerMockito.stub(PowerMockito.method(ArrTest.class, "myMethod")).toReturn(0); 
     System.out.println(ArrTest.myMethod(null)); 
    } 
} 

編輯:

爲了解決後續在評論中提問 - 如果您已經有測試跑步者並且不能使用PowerMockRunner,則可以使用PowerMockRule獲得相同的結果:

@PrepareForTest(ArrTest.class) 
public class ArrTestTest { 

    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    @Test 
    public void myMethodTest(){ 
     PowerMockito.stub(PowerMockito.method(ArrTest.class, "myMethod")).toReturn(0); 
     System.out.println(ArrTest.myMethod(null)); 
    } 
} 
+0

如果類ArrTestTest已經與MockitoJUnitRunner.class一起運行,該怎麼辦? – gstackoverflow

+0

另一種方法是使用'PowerMockRule' - 我也用這些信息編輯了我的答案。 – Mureinik

+0

真棒,太棒了 – gstackoverflow

相關問題