如何使用回调参数编写异步函数的单元测试

时间:2019-06-27 14:00:07

标签: unit-testing testing kotlin ktor kotlin-multiplatform

我正在为我的kotlin多平台库编写通用测试,该库使用ktor客户端库实现API业务逻辑。

我有一个函数,将回调作为参数,使用协程向API发出请求,然后执行回调。

这是我要测试的UserApi类中函数的简化版本

fun <T : Any> fetch(
    requestBuilder: HttpRequestBuilder,
    deserializer: DeserializationStrategy<T>,
    callback: (Either<ErrorMessage, T>) -> Unit)
{
    GlobalScope.launch(dispatcherIO) {
        val result: Either<ErrorMessage, T> =
        try {
            val returnObject: T = Json.parse(
                deserializer, 
                HttpClient().post(requestBuilder)
            )
            Either.Right(returnObject)
        } catch (e: Exception) {
            Either.Left(ErrorMessage(e.message))
        }
        withContext(dispatcherMain) { callback(result) }
    }
}

我想编写这样的单元测试:

@Test
fun requestOK() {
    runTest { //runTest returns a platform specific runBlocking
        val UserApi().fetch(request, User.serializer()) {
            it.fold(
                { failure -> fail("must return success" },
                { user -> assertEquals(expectedUser, user) }
            )
        }
    }    
}

0 个答案:

没有答案