Как имитировать метод, вызываемый в методе тестирования для Android?

Я пишу тесты для своего приложения для 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?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не видите, что метод 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);

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