Вам не хватает одной строки. Попробуйте это.
Application applicationMock = PowerMockito.mock(Application.class);
PowerMockito.when(applicationMock.doOperation(anyInt(), anyInt())).thenCallRealMethod();
int res = applicationMock.doOperation(1, 5);
Вы объявили приложение как макет. и не определено поведение для метода doOperation. Следовательно, управление не входит в метод и, как следствие, ничего не работает.
Вот полный код,
@RunWith(PowerMockRunner.class)
@PrepareForTest({Application.class})
public class ApplicationTest {
@Test
public void test() throws Exception {
Addition addition = PowerMockito.mock(Addition.class);
PowerMockito.when(addition.sum(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt())).thenReturn(15);
PowerMockito.whenNew(Addition.class).withNoArguments().thenReturn(addition);
Application applicationMock = PowerMockito.mock(Application.class);
when(applicationMock.doOperation(anyInt(), anyInt())).thenCallRealMethod();
int res = applicationMock.doOperation(1, 5);
assertEquals(res, 15);
}
}
Если вы хотите проверить только метод сложения. Вам не нужно издеваться над классом приложения. Вместо этого создайте новый экземпляр класса Application. С этим вам не нужно исправление, ваш текущий код должен быть достаточным.
используйте
Application application = new Application();
вместо
Application applicationMock = PowerMockito.mock(Application.class);
Если у вас есть веская причина использовать mock вместо реального экземпляра, то это решение.