unit-testing - 如何对名为 CoroutineScope.launch 的函数进行单元测试
问题描述
给定suspend fun
:
private suspend fun fun1(arugment1: String): NetworkResult<Unit>
单元测试下面的fun2和fun3如何
Q1:调用suspend fun的函数:
fun fun2(argument1: String) {
launch {
CustomService().fun1(argument1))
.onSuccessEmpty { _: Int, _: Headers ->
Log.d("TEST", "onSuccessEmpty")
}
.onSuccess { _: Int, _: Headers, _: Unit ->
Log.d("TEST", "onSuccess")
}.onError {
Log.d("TEST", "onError $it")
}
}
}
问题二:
fun fun2(argument1: String) {
runBlocking {
CustomService().fun1(argument1))
.onSuccessEmpty { _: Int, _: Headers ->
Log.d("TEST", "onSuccessEmpty")
}
.onSuccess { _: Int, _: Headers, _: Unit ->
Log.d("TEST", "onSuccess")
}.onError {
Log.d("TEST", "onError $it")
}
}
}
解决方案
由于我们从不想让测试中的顶级函数挂起,所以我们总是以阻塞方式运行它们。所以正确的方法是Q2
. 由于Q1
uses launch
,它只是一劳永逸。(我可能误解了你的问题,但我相信你在问这两种方法中哪一种更好。)
推荐阅读
- ios - Mascapsul MQTT IOS
- angular - 使用 ngx-chips TagInput 并在本地工作时在服务器上出错
- kotlin - 无法为 retrofit2.Call 调用无参数构造函数
- python - 如何将在 GPU 上训练的模型加载到 CPU(系统)内存中?
- kubernetes - 当 `cgroup_manager=systemd` 时使用 cri-o 运行 pod 和容器
- python - 如何从数据集中的其余部分中选择一行并将其添加到python中的初始矩阵中?
- javascript - 如果操作数有小数,正则表达式可防止逗号分隔符
- java - 如何使自动递增数字Java
- angular - 集成 Google 地图 API 时,Angular5 应用程序未在 IE11 中加载
- react-final-form - 当外部组件的状态发生变化时,改变 React 最终表单字段的值