Я пытаюсь протестировать свой класс Retrofit в модульных тестах, и я сталкиваюсь с проблемой внедрения зависимостей в мой тестовый класс. У меня есть 3 класса:
- Класс обслуживания: интерфейс дооснащения
- Класс базы данных с использованием Room (для которого требуется контекст приложения)
- Репозиторий, построенный с использованием Service AND Database
Вот код репозитория:
class Repository(
private val database: Database,
private val service: Service
)
{
fun login(credentials: String): LiveData<String> {
val loginResponse = MutableLiveData<String>()
service.login(credentials)
.enqueue(object: Callback<ResponseBody>{
// Login SUCCESS
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
if (response.isSuccessful)
loginResponse.value = response.body()?.string()
else
loginResponse.value = response.errorBody()?.string()
}
// Login FAILED
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
loginResponse.value = t.message
}
})
return loginResponse
}
}
Вот мой тестовый класс:
@RunWith(AndroidJUnit4::class)
class ApiTest: KodeinAware {
private val instrumentationContext = InstrumentationRegistry.getInstrumentation().context
override val kodein = Kodein {
// Define injections
bind() from singleton { Service() }
bind() from singleton { Database(instrumentationContext) }
bind() from singleton { Repository(instance(), instance()) }
}
private val repository: Repository by instance()
@Test
fun login_isSuccessful() {
val loginResponse = repository.login("xxxxxxxxx")
val response = "{................}"
assertEquals(loginResponse, response)
}
Я получаю следующую ошибку:
E/TestRunner: java.lang.IllegalArgumentException: Cannot provide null context for the database.