Тестирование модуля mockito Требуется, но не вызывается: - PullRequest
0 голосов
/ 11 сентября 2018

Я видел, что подобный вопрос уже существует в SO, я перепробовал все решения, но не смог решить мою проблему, так как я новичок в tdd

У меня есть такой класс

public class AppUpdatesPresenter  {

    public void stopService() {
        ServiceManager.on().stopService();
    }
}

У меня есть такой тестовый класс

@RunWith(MockitoJUnitRunner.class)
public class AppUpdatesPresenterTest {
       @Mock
       AppUpdatesPresenter appUpdatesPresenter;

       @Mock
       ServiceManager serviceManager;

       @Mock
       Context context;

       @Test
       public void test_Stop_Service() throws Exception {
            appUpdatesPresenter.stopService();
            verify(serviceManager,times(1)).stopService();
       }

}

Когда я пытался проверить это, если я вызываю stopService() метод, то ServiceManager.on().stopService(); вызывается хотя бы один раз.

Но я получаю следующую ошибку

Wanted but not invoked:
serviceManager.stopService();
-> at io.example.myapp.ui.app_updates.AppUpdatesPresenterTest.test_Stop_Service(AppUpdatesPresenterTest.java:103)
Actually, there were zero interactions with this mock.

Не уверен, что пошло не так.

1 Ответ

0 голосов
/ 11 сентября 2018

Когда вы звоните appUpdatesPresenter.stopService();, ничего не произошло, потому что вы не сказали, что должно происходить.

Чтобы пройти тест, вам нужно ввести appUpdatesPresenter.

@Test
public void test_Stop_Service() throws Exception {
    doAnswer { serviceManager.stopService(); }.when(appUpdatesPresenter).stopService()
    appUpdatesPresenter.stopService();
    verify(serviceManager).stopService();
}

Кстати, тест выше не имеет смысла , так как вы заглушаете все вещи.


Чтобы тест был понятен, вы должны ввести ServiceManager вместо того, чтобы связывать его с AppUpdatePresenter.

public class AppUpdatesPresenter  {
    private final ServiceManager serviceManager;

    public AppUpdatesPresenter(ServiceManager serviceManager) {
        this.serviceManager = serviceManager;
    }

    public void stopService() {
        sm.stopService();
    }
}

Затем сделайте тестируемый AppUpdatesPresenter.

@InjectMock AppUpdatesPresenter appUpdatesPresenter;

Теперь тестовый пример основан не на постоянном взаимодействии, а на реальной реализации вашего кода.

@Test
public void test_Stop_Service() throws Exception {
    appUpdatesPresenter.stopService();
    verify(serviceManager).stopService();
}
...