Я пишу тесты для своего приложения для Android, и мне нужно смоделировать метод из моего класса, который вызывается в методе, который я тестирую. Это мой класс:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
.....
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (!isAppOnForeground(this)) {
DoSomeThing();
}
}
}
public boolean isAppOnForeground(Context context) {
return isAppOnForeground;
}
}
Я хочу протестировать метод onMessageReceived, когда isAppOnForeground возвращает true и false.
я попробую
@Test
public void onMessageReceived() {
MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.mock(MyFirebaseMessagingService.class);
when(mockMyFirebaseMessagingService.isAppOnForeground(any(Context.class))).thenReturn(false);
mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);
...
}
Но когда я запускаю этот тест, я не вижу вызова метода onMessageReceived (точки останова не работают).
Как я могу издеваться над isAppOnForeground и называть onMessageReceived?




Вы не видите, что метод onMessageReceived() работает, потому что это не так.
MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.mock(MyFirebaseMessagingService.class);
Вы создаете макет, пустой макет, который ничего не знает о реализации исходного класса.
Вместо этого вы хотите использовать spy(). Попробуй это:
MyFirebaseMessagingService myFirebaseMessagingService = new MyFirebaseMessagingService();
MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.spy(myFirebaseMessagingService);
doReturn(false).when(mockMyFirebaseMessagingService).isAppOnForeground(any(Context.class));
mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);