Tôi đang cố gắng sử dụng Powermock và Mockito để giả lập một phương pháp tĩnh void để ném ngoại lệ như dưới đây. Nhưng tôi đã gặp một vấn đề. Trừ khi tôi thực hiện hai invocations của Adder.add() với cùng một đối số, các giả lập IOException
sẽ không được ném.Làm thế nào để giả lập một phương pháp tĩnh void để ném ngoại lệ với Powermock?
BTW, tôi đã thêm @RunWith(PowerMockRunner.class)
và @PrepareForTest(Adder.class)
vào lớp kiểm tra đơn vị.
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
}
Xin cảm ơn trước. :)
Trả lời như sau.
Sau khi tham khảo tại đây http://code.google.com/p/powermock/issues/detail?id=278, trên thực tế Adder.add (12) ở trên là một phần của việc thiết lập phương pháp tĩnh giả. Nó có nghĩa là khi gọi Adder.add() với đối số 12, IOException sẽ được ném. Thật khó hiểu, đúng không? :) Vì vậy, nó nên được viết như dưới đây.
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
Điều này không trực quan chút nào. Đấu tranh để làm việc này. Cảm ơn vì tiền hỗ trợ. – Dhiraj
Lưu ý rằng 'Adder.add (anyInt());' không phải là những gì kích hoạt ngoại lệ ở đây, nó áp dụng nó cho các cuộc gọi đến 'Adder.add()'. – sjngm