簡體   English   中英

如何使用Powermock模擬void靜態方法拋出異常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM