Сбой после обновления до библиотеки тестирования фрагментов v1.1.0-alpha03 - PullRequest
0 голосов
/ 02 января 2019

После обновления до androidx.fragment:fragment-testing v1.0-alpha03 мы получаем следующее падение в конце теста.

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Collection java.util.concurrent.ConcurrentHashMap.values()' on a null object reference
at androidx.lifecycle.ViewModel.clear(ViewModel.java:125)
at androidx.lifecycle.ViewModelStore.clear(ViewModelStore.java:62)

Важно, что это тест, в котором мы моделируем экземпляр ViewModel, который используется, и проблемы, похоже, связаны с изменениями в lifecycle-viewmodel v2.1.0-alpha01, от которых мы теперь имеем транзитивную зависимость. В частности, происходит сбой в следующем методе, потому что mBagOfTags является нулевым

final void clear() {
    mCleared = true;
    for (Object value: mBagOfTags.values()) {
        // see comment for the similar call in setTagIfAbsent
        closeWithRuntimeException(value);
    }
    onCleared();
}

Проработав вопрос, название теперь, возможно, немного вводит в заблуждение. Похоже, проблема, как правило, связана с насмешливыми ViewModel экземплярами, начиная с обновления 2.1.0-alpha01

1 Ответ

0 голосов
/ 07 января 2019

Таким образом, проблема сводилась, как уже упоминалось, к невозможности смоделировать ViewModel экземпляров с момента выпуска хотя бы v2.1.0-alpha01.Решение, которое оказалось, состояло в том, чтобы использовать spy() вместо этого.Я использую Koin, так что это означало, что мой тест теперь расширяет KoinTest.Затем я могу добавить следующее для проверки

val someViewModel: SomeViewModel by inject()

и затем вызвать следующее

    val spySomeViewModel = spy(someViewModel)
    loadKoinModules(module {
        viewModel(override = true) {
            spySomeViewModel
        }
    })

, а затем, как было в случае, когда mock() может сделать что-то вроде

doReturn(someResult).whenever(spySomeViewModel).someMethod()

ОБНОВЛЕНИЕ: из https://issuetracker.google.com/issues/122273087 "Мы исправили это внутренне в https://android -review.googlesource.com / 863029 , чтобы гарантировать, что смоделированные модели представления работают какbefore, и это будет доступно в следующей версии ViewModel (и Fragment, и т. д., который зависит от него). "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...