по коду. Метод возвращает что-то.
Задача: протестировать этот метод с junit, mockito
Проблема: код валится с NPE, указываея, что переменная, которую я создаю в тестируемом методе не проинициализирована. Переменая - data class с примитивами.
Вопрос: как это решается? Может быть можно замокать переменную внутри метода или какие-то другие решения есть?
какой код, если ли что-то про default values в тестах в build.gradle?
Нет override fun refresh(): Single<Unit> { val request = RefreshTokenRequest(sharedPreferences.getRefreshToken()) return api.refresh(request) .flatMap { it.toSingle() } .map { sharedPreferences.saveRefreshToken(it.refreshToken) sharedPreferences.saveAuthToken(it.authToken) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) }
какая переменная, какой датакласс, откуда берётся?
переменная val request = RefreshTokenRequest(sharedPreferences.getRefreshToken()) sharedPreferences, брошенный в конструктор - не мок, а реализация. data class RefreshTokenRequest(val refreshToken: String)
а когда становится понятно, что там null?
на строке api.refresh(request) -> она возвращает null. При этом api замоканный и описано, что оно должн возвращать whenever(apiMock.refresh(refreshTokenRequestMock)).thenReturn(Single.just(loginResponseMockWrapped))
то есть не переменная оказывается null, а замоканный метод возвращает null
мб request != refreshTokenRequestMock
Спасибо! Ошибка была именно в этом
Обсуждают сегодня