【问题标题】:Unit test cases for Callbacks using Junit使用 Junit 进行回调的单元测试用例
【发布时间】:2019-07-21 10:33:19
【问题描述】:

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

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 中的类编写单元测试用例吗?

【问题讨论】:

    标签: java android kotlin junit4


    【解决方案1】:

    问题是测试在调用回调之前完成并且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())
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多