Юнит тест с кодеином - PullRequest
       21

Юнит тест с кодеином

1 голос
/ 30 октября 2019

Я пытаюсь протестировать свой класс 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.
...