Mock FirebaseRemoteConfig getBoolean () - PullRequest
       8

Mock FirebaseRemoteConfig getBoolean ()

0 голосов
/ 07 февраля 2020

У меня есть модульный тест, который требует от меня либо true, либо false для записи конфигурации Firebase. Но даже если я установил макет на true, он всегда возвращает false при запуске модульного теста.

Вот мой макет:

doReturn(true).when(mock(FirebaseRemoteConfig.class)).getBoolean(any());

А вот код с true или false условие

FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
boolean useHttp = firebaseRemoteConfig.getBoolean(RemoteConfigKeys.PUSH_RECEIVED_USE_HTTP);

useHttp всегда false

Тестовые зависимости:

    // Unit test dependencies
    testImplementation 'androidx.test:core:1.2.0'
    testImplementation "androidx.work:work-testing:2.2.0"
    testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2'
    testImplementation 'org.robolectric:robolectric:4.3.1'
    testImplementation 'org.robolectric:shadows-playservices:4.3.1'
    testImplementation 'org.mockito:mockito-core:2.24.5'
    testImplementation 'com.google.truth:truth:1.0'
    testImplementation 'com.google.android.material:material:1.0.0'
    testImplementation "com.squareup.leakcanary:leakcanary-android:2.0-beta-5"
    kaptTest 'org.parceler:parceler:1.1.12'
    kaptTest "com.google.dagger:dagger-compiler:2.25.4"

Любые идеи приветствуются!

1 Ответ

0 голосов
/ 09 февраля 2020

Ваше первое утверждение эквивалентно этому:

FirebaseRemoteConfig aTemporaryExistingJavaObject = mock(FirebaseRemoteConfig.class);
doReturn(true).when(aTemporaryExistingJavaObject).getBoolean(any());

Это не работает, потому что ваш производительный код не использует этот макет (он не будет возвращен FirebaseRemoteConfig.getInstance()).

Вам нужен способ вставить макет в тестируемый класс, например,

  • передать его в тестируемый метод
  • передать его в конструктор
  • call FirebaseRemoteConfig.getInstance() защищенным способом, который подсматривается в тесте
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...