Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Junit的回调单元测试用例_Java_Android_Kotlin_Junit4 - Fatal编程技术网

Java 使用Junit的回调单元测试用例

Java 使用Junit的回调单元测试用例,java,android,kotlin,junit4,Java,Android,Kotlin,Junit4,我正在尝试为一个类编写一些单元测试用例,该类的函数以回调作为参数(请参见下面的代码) 单元测试用例是 @RunWith(AndroidJUnit4::class) class NetworkApiTest { var networkApi: NetworkApi? = null @Test fun testEmptyToken() { networkApi = NetworkApi("") networkApi?.getToken {

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

单元测试用例是

@RunWith(AndroidJUnit4::class)
class NetworkApiTest {

    var networkApi: NetworkApi? = null

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

}
无论何时我运行这个测试用例,无论我发送什么值,我都会获得成功。我知道我做得不完全正确。
有人能帮我在JUnit中为类编写单元测试用例吗。

问题是,在调用回调之前测试就完成了,而断言在错误的线程中。 您必须将回调的结果复制回主线程。使用一个。 如果您希望在一段时间后测试失败,可以使用带有超时值的
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())
    }
}
@RunWith(AndroidJUnit4::class)
类网络测试{
var networkApi:networkApi?=null
@试验
有趣的测试{
val future=CompletableFuture()
networkApi=networkApi(“”)
networkApi?.getToken{
未来。完成(it)
}
val结果=future.get(3,TimeUnit.SECONDS)
Assert.assertThat(它,isEmptyOrNullString())
}
}

问题在于,在调用回调之前,测试完成,并且
断言
位于错误的线程中。 您必须将回调的结果复制回主线程。使用一个。 如果您希望在一段时间后测试失败,可以使用带有超时值的
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())
    }
}
@RunWith(AndroidJUnit4::class)
类网络测试{
var networkApi:networkApi?=null
@试验
有趣的测试{
val future=CompletableFuture()
networkApi=networkApi(“”)
networkApi?.getToken{
未来。完成(it)
}
val结果=future.get(3,TimeUnit.SECONDS)
Assert.assertThat(它,isEmptyOrNullString())
}
}