Я пытаюсь использовать Powermock и Mockito, чтобы смоделировать пустой статический метод, чтобы вызвать исключение, как показано ниже. Но я столкнулся с проблемой. Если я не сделаю два вызова Adder.add () с одним и тем же аргументом, высмеянное IOException
не будет выброшено.
Кстати, я добавил @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) выше является частью настройки макета статического метода. Это означает, что при вызове Adder.add () с аргументом 12, IOException будет выброшено. Это трудно понять, верно? :) Так и должно быть написано как ниже.
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());