2015-12-16 3 views
4

Я пишу JUnit тестовый пример методов, аналогичных образца приведены ниже:Проверьте статический метод вызова с использованием PowerMockito 1,6

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(); 
} 

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

ответ

12

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

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

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

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

+0

Это действительно работало как шарм. –

Смежные вопросы