Проверка статического вызова метода с помощью PowerMockito 1.6

Я пишу тестовый пример JUnit для методов, похожих на приведенный ниже пример:

Class SampleA{
    public static void methodA(){
        boolean isSuccessful = methodB();
        if(isSuccessful){
            SampleB.methodC();
        }
    }

    public static boolean methodB(){
        //some logic
        return true;
    }
}

Class SampleB{
    public static void methodC(){
        return;
    }
}

Я написал следующий тестовый пример в моем тестовом классе:

@Test
public void testMethodA_1(){
    PowerMockito.mockStatic(SampleA.class,SampleB.class);

    PowerMockito.when(SampleA.methodB()).thenReturn(true);
    PowerMockito.doNothing().when(SampleB.class,"methodC");

    PowerMockito.doCallRealMethod().when(SampleA.class,"methodA");
    SampleA.methodA();
}

Теперь я хочу проверить, вызывается ли static methodC() класса Sample B или нет. Как я могу добиться с помощью PowerMockito 1.6? Я перепробовал много вещей, но, похоже, у меня ничего не вышло. Любая помощь приветствуется.

1 ответ

Решение

Лично я должен сказать, что PowerMock и т. Д. - это решение проблемы, которой у вас не должно быть, если ваш код не плохой. В некоторых случаях это требуется, потому что фреймворки и т. Д. Используют статические методы, которые приводят к коду, который просто не может быть протестирован иначе, но если речь идет о ВАШЕМ коде, вы всегда должны предпочитать рефакторинг вместо статического макета.

Во всяком случае, проверить, что в PowerMockito не должно быть так сложно...

PowerMockito.verifyStatic( Mockito.times(1)); // Verify that the following mock method was called exactly 1 time
SampleB.methodC();

(Конечно, чтобы это работало, вы должны добавить SampleB к @PrepareForTest аннотация и вызов mockStatic для этого.)

Другие вопросы по тегам