gpt4 book ai didi

unit-testing - 如何测试在 Kotlin 中调用顶级函数的代码?

转载 作者:IT老高 更新时间:2023-10-28 13:37:44 26 4
gpt4 key购买 nike

我对 Kotlin 很陌生。

我有一个调用顶级函数(进行 http 调用)的类。我正在尝试为我的类(class)编写单元测试,而无需将其发布到网络上。

有没有办法模拟/powermock/拦截从我的类(class)到 Kotlin 顶级函数的调用?

class MyClass {
fun someMethod() {
// do some stuff
"http://somedomain.com/some-rest/action".httpGet(asList("someKey" to "someValue")).responseString { (request, response, result) ->
// some processing code
}
}
}

它正在使用 kittinunf/Fuel library用于 httpGet 调用。

它向 String 添加了一个顶级函数,该函数最终调用 Fuel 中的伴随对象函数 (Fuel.get())。

单元测试需要拦截对httpGet的调用,以便我可以返回一个json字符串进行测试。

最佳答案

我鼓励您将远程 API 调用封装在一个接口(interface)后面,该接口(interface)将通过构造函数注入(inject)到使用它的类中:

class ResponseDto
interface SomeRest {
fun action(data:Map<String,Any?>): ((ResponseDto)->Unit)->Unit
}
class FuelTests(val someRest: SomeRest) {
fun callHttp(){
someRest.action(mapOf("question" to "answer")).invoke { it:ResponseDto ->
// do something with response
}
}
}

另一种方法是注入(inject)一个假的 ClientFuel 使用:

FuelManager.instance.client = object: Client {
override fun executeRequest(request: Request): Response {
return Response().apply {
url = request.url
httpStatusCode = 201
}
}
}

Fuel.testMode()

"http://somedomain.com/some-rest/action".httpGet(listOf()).responseString { request, response, result ->
print(response.httpStatusCode) // prints 201
}

关于unit-testing - 如何测试在 Kotlin 中调用顶级函数的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38692284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com