Если он относится к SDK, он, вероятно, не будет работать в модульном тесте. Вы не включили свои импортные данные, поэтому невозможно сразу определить, но по опыту я знаю, что вы не можете использовать это в модульном тесте
AndroidSchedulers.mainThread()
Вам нужно заменить это, скажем, Schedulers.trampoline ()
Пример настройки настраиваемого планировщика для тестирования
Обратите внимание, что это только пример, и есть другие допустимые решения.
class RxUtils {
companion object {
// add this
@VisibleForTesting var mainScheduler = AndroidSchedulers.mainThread()
@VisibleForTesting var ioScheduler = Schedulers.io()
@SuppressLint("CheckResult")
fun <E> applySchedulersAndErrorMapper(): ObservableTransformer<E, E> {
return ObservableTransformer { o ->
o.flatMap(Function<E, ObservableSource<E>> { element ->
val genericResponse = element as GenericResponse<*>
@Suppress("UNCHECKED_CAST")
return@Function Observable.just(genericResponse as E)
}).onErrorResumeNext(Function<Throwable, ObservableSource<E>> { t ->
if (t is ApiException) {
return@Function Observable.error(t)
}
var genericResponse: GenericResponse<*>? = null
return@Function Observable.error(ApiException(t.message ?: "", genericResponse?.result ?: Result()))
})
.observeOn(mainScheduler)
.subscribeOn(ioScheduler)
}
}
}
}
И в вашем тесте:
@Before fun setup() {
RxUtils.mainScheduler = Schedulers.trampoline()
RxUtils.ioScheduler = Schedulers.trampoline()
}
@After fun teardown() {
RxUtils.mainScheduler = AndroidSchedulers.mainThread()
RxUtils.ioScheduler = Schedulers.io()
}
РЕДАКТИРОВАТЬ в ответ на обновленное сообщение с дополнительной информацией о тесте
Прежде всего, вы должны опубликовать ПУТЬ БОЛЬШЕ КОДА. Это расстраивает необходимость вытаскивать это из вас с помощью сгустков крови. Тем не мение. У вас есть следующее:
@Mock
private UserService userService;
Это создает насмешку UserService
, конечно, но это не заглушка ничего. Когда вы звоните userService.anyFunctionAtAll()
, он вернет ноль по умолчанию. Там твой NPE. Вы должны заглушить это. Например:
Mockito.when(userService.anyFunctionAtAll()).thenReturn(somePredeterminedValue)
Для получения дополнительной информации см. Веб-сайт Mockito .