我想用Powermock和Mockito來模擬一個無效的靜態方法來拋出異常,如下所示。但我遇到了一個問題。除非我使用相同的參數對Adder.add()進行兩次調用,否則將不會拋出嘲諷的IOException
。如何模擬一個無效的靜態方法來拋出Powermock異常?
順便說一句,我已經將@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());
這根本不直觀。努力得到這個工作。謝謝你的提示。 – Dhiraj
請注意,'Adder.add(anyInt());'不是觸發異常的地方,它適用於調用'Adder.add()'。 – sjngm