gpt4 book ai didi

java - 使用 Junit 进行回调的单元测试用例

转载 作者:行者123 更新时间:2023-12-02 01:38:03 24 4
gpt4 key购买 nike

我正在尝试为一个具有回调作为参数的函数的类编写一些单元测试用例(请参阅下面的代码)

class NetworkApi(private val url: String) {

fun getToken(listener: (String) -> Unit) {
Thread(Runnable {
Thread.sleep(2000)
if (TextUtils.isEmpty(url)) listener("")
else listener("Dummy token")
}).start()
}
}

单元测试用例是

@RunWith(AndroidJUnit4::class)
class NetworkApiTest {

var networkApi: NetworkApi? = null

@Test
fun testEmptyToken() {
networkApi = NetworkApi("")
networkApi?.getToken {
Assert.assertThat(it, isEmptyOrNullString())
}
}

}

每当我运行这个测试用例时,无论我发送什么值,我总是会成功。我知道我没有按照正确的方式做。有人可以帮我为 JUnit 中的类编写单元测试用例吗?

最佳答案

问题在于测试在调用回调之前完成,并且 assert 位于错误的线程中。您必须将回调结果复制回主线程。使用CompletableFuture 。如果您希望在一段时间后测试失败,可以使用带有超时值的 get 方法:

@RunWith(AndroidJUnit4::class)
class NetworkApiTest {
var networkApi: NetworkApi? = null

@Test
fun testEmptyToken() {
val future = CompletableFuture<String>()
networkApi = NetworkApi("")
networkApi?.getToken {
future.complete(it)
}
val result = future.get(3,TimeUnit.SECONDS)
Assert.assertThat(it, isEmptyOrNullString())
}
}

关于java - 使用 Junit 进行回调的单元测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54909959/

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