Вы пытаетесь вернуть Response<Void>
, где потребуется Deferred<Response<Void>>
.
Отсрочка - это, в основном, результат работы, которая еще не выполнена. Когда отложено isCompleted
, результат готов. В вашем случае вы, скорее всего, захотите иметь Отложенный, который уже заполнен ответом.
Для создания отложенного, которое уже завершено с некоторым значением, вы можете использовать функцию CompletableDeferred(value: T)
.
Вот полный пример того, как вернуть завершенный отложенный из клиента макет.
interface GithubClient {
@GET("users/{username}/repos")
fun listRepos(@Path("username") username: String): Deferred<Response<Void>>
}
class RepoService(val client: GithubClient) {
suspend fun doSomething(username: String): Response<Void> {
return client.listRepos(username).await()
}
}
class GithubClientTests {
private lateinit var client: GithubClient
@BeforeTest
fun setUp() {
// setup the mocked client
client = mockk<GithubClient>(relaxed = true)
val mockResponse = mockk<Response<Void>>(relaxed = true)
every { client.listRepos(any()) } returns CompletableDeferred(mockResponse)
}
@Test
fun testMockClient() = runBlocking<Unit> {
// create the service with the mocked client
val service = RepoService(client)
val response = service.doSomething("octocat")
// response is not successful, because we didn't specify any behavior for the mocked response
assertFalse { response.isSuccessful }
}
}