Как выполнить модульное тестирование httprequest с использованием corouties - PullRequest
0 голосов
/ 13 февраля 2019

Я бы хотел провести несколько юнит-тестов и подделать подделку httpresponse.Я создал httprequest

Но когда я делаю "whenever(repository.search(any())).thenReturn(response)", у меня появляется "NullPointerException на "search()"

Когда я запускаю приложение на устройстве / эмуляторехорошо работает

@Test
fun searchUser_success() {
    val expectedUser = User("Louis", 1, "", "", "", "", "", "", "", "", 0.0)
    val result = Result(1, false, listOf(expectedUser))
    val response = RTResponse.Success(result)
    whenever(runBlocking { repository.search("Louis") }).thenReturn(response)
    Assert.assertEquals(expectedUser, viewModel.users.value)
}

class SearchRepository(private val searchInterface: SearchInterface) {
    suspend fun search(user: String): RTResponse<Result> {
        val response = searchInterface.searchAsync(query = user, page = 1, perPage = 10).await()
        return try {
            if (response.isSuccessful) RTResponse.Success(response.body()!!) else RTResponse.Error(IOException(""))
        } catch (e: java.lang.Exception) {
            RTResponse.Error(IOException("Unable to fetch users"))
        }
    }
}


interface SearchInterface {
    //http request
    @GET("search/users")
    fun searchAsync(@Query("q") query: String,
                    @Query("page") page: Int,
                    @Query("per_page") perPage: Int): Deferred<Response<Result>>

    //singleton instance of Retrofit
    companion object Factory { /* build retrofit instance */ }
}
...