Как издеваться над пустым статическим методом, чтобы вызвать исключение с помощью Powermock? - PullRequest
25 голосов
/ 20 сентября 2011

Я пытаюсь использовать 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());

Ответы [ 3 ]

27 голосов
/ 22 сентября 2011

Ответ приведен ниже.

После консультации здесь 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());

РЕДАКТИРОВАТЬ:
Ссылка не работает, попробуйте Интернет-архив один вместо.

4 голосов
/ 19 октября 2016

или

PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));
0 голосов
/ 20 сентября 2011

Вы забыли перевести PowerMock в режим воспроизведения?

Как макетировать статические методы.

По вашей ссылке ...

Как проверить поведение Проверка статического метода выполняется в два этапа. Сначала вызовите PowerMockito.verifyStatic(), чтобы начать проверку поведения, и вызовите статический метод, который вы хотите проверить. Э.Г.

 PowerMockito.verifyStatic();
 Static.firstStaticMethod(param);

Важное замечание: Вам необходимо вызывать verifyStatic() для подтверждения метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...