android - 如何对仅调用不返回任何依赖项的函数的函数进行单元测试?
问题描述
我在如何对我的视图模型功能进行单元测试时遇到问题。
class MyViewModel(
private val dependency: Dependency
) : ViewModel() {
private val _myFunctionState = MutableLiveData<State>()
val myFunctionState: LiveData<State> = _myFunctionState
fun myFunction() {
viewModelScope.launch(CoroutineExceptionHandler { _, throwable ->
_myFunctionState.postValue(State.Error(throwable)
}) {
_myFunctionState.postValue(State.Loading)
dependency.callFunction()
_myFunctionState.postValue(State.Success)
}
}
}
现在,如果dependency.callFunction()
要返回一些东西,我可以很容易地测试我是否得到了值并做一个断言,liveData.value shouldBe valueFromFunction
但在这种情况下,函数只是执行一些东西
我考虑过使用验证来测试它
fun test_myFunction() {
val dependency = mockk<Dependency>(relaxed = true)
val viewModel = MyViewModel(dependency)
viewModel.myFunction()
coVerify { dependency.callFunction() }
confirmVerified(dependency)
}
但是如果我走这条路,这已经在测试实现细节了。我应该测试行为所以我决定测试状态
fun test_myFunction() {
val dependency = mockk<Dependency>(relaxed = true)
val viewModel = MyViewModel(dependency)
viewModel.myFunction()
viewModel.myFunctionState.value shouldBe State.Success
}
由于这是一个协程,因此执行将停止dependency.callFunction()
,只有在成功时才会恢复并发出状态。现在这测试了行为,但是,如果开发人员删除了依赖调用怎么办?现在测试仍然可以通过而不调用依赖项。
我应该继续测试实现并验证依赖调用吗?还是我应该跳过这个测试?
非常感谢!
解决方案
推荐阅读
- javascript - Vue i18n 中链接区域设置消息的参数化格式
- linux - 不在家庭网络上时无法解析 localhost
- kotlin - Java 方法在 Kotlin 中不可用?
- javascript - Webpack - sockjs.js SyntaxError: 位置 1 的 JSON 中的意外标记(仅在 Chrome 上发生)
- angular - Angular:枚举未定义
- sql - 如何根据将两列与各自的表(SQL 脚本)进行比较来插入值?
- mysql - Plesk 与本地 PC 上的 MariaDB 慢查询
- javascript - 如何使用 html js 和 bootstrap 编辑标题
- javascript - 如何处理 AirBNB 配置中冲突的 eslint 规则
- javascript - Javascript根据另一个内容更改div颜色