使用 Junit 的回调单元测试用例
Unit test cases for Callbacks using Junit
我正在尝试为 class 编写一些单元测试用例,其中包含以回调作为参数的函数(请参阅下面的代码)
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 中为 classes 编写单元测试用例吗?
问题是测试在调用回调之前完成并且 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())
}
}
我正在尝试为 class 编写一些单元测试用例,其中包含以回调作为参数的函数(请参阅下面的代码)
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 中为 classes 编写单元测试用例吗?
问题是测试在调用回调之前完成并且 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())
}
}