[英]How to mock a void static method to throw exception with Powermock?
我試圖使用Powermock和Mockito來模擬一個void靜態方法來拋出異常,如下所示。 但我遇到了一個問題。 除非我使用相同的參數對Adder.add()進行兩次調用,否則不會拋出模擬的IOException
。
順便說@RunWith(PowerMockRunner.class)
,我已經將@RunWith(PowerMockRunner.class)
和@PrepareForTest(Adder.class)
到單元測試類中。
class Adder{
public static void add(int i) throws IOException{
return;
}
}
@Test
public void testAdder() throws IOException{
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(12);
try {
Adder.add(11);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// assert things
}
提前致謝。 :)
答案如下。
在咨詢http://code.google.com/p/powermock/issues/detail?id=278之后 ,實際上上面的Adder.add(12)是設置模擬靜態方法的一部分。 這意味着在使用參數12調用Adder.add()時,將拋出IOException。 這很難理解,對吧? :)所以它應該寫如下。
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
答案如下。
在咨詢http://code.google.com/p/powermock/issues/detail?id=278之后 ,實際上上面的Adder.add(12)是設置模擬靜態方法的一部分。 這意味着在使用參數12調用Adder.add()時,將拋出IOException。 這很難理解,對吧? :)所以它應該寫如下。
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
編輯:
鏈接已死,請嘗試使用Internet Archive 1。
要么
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));
您是否忘記將PowerMock置於重放模式?
根據你的鏈接......
如何驗證行為靜態方法的驗證分兩步完成。 首先調用PowerMockito.verifyStatic()
以開始驗證行為並調用要驗證的靜態方法。 例如
PowerMockito.verifyStatic();
Static.firstStaticMethod(param);
重要提示:您需要按方法驗證調用verifyStatic()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.