android - 运行类时单元测试总是失败
问题描述
当我运行这个类时,我总是在verify_on_success_is_called()
错误的方法中测试失败,
实际上,与此模拟的交互为零。
但如果我只运行方法,测试将通过。
@Mock
lateinit var mDummy: Dummy
private lateinit var mainViewModel: MainViewModel
@Mock
lateinit var main: MainViewModel.IMain
@Before
@Throws(Exception::class)
fun setup() {
MockitoAnnotations.initMocks(this)
MainViewModel.mIMain = main
RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }
mainViewModel = MainViewModel(mDummy)
}
@Test
fun verify_on_success_is_called() {
val mockList: ArrayList<Employee> = ArrayList()
mockList.add(Employee(1, "a", 20000.0, 22))
val list: List<Employee> = mockList
`when`(mDummy.getEmployees()).thenReturn(Observable.just(Response.success(list)))
mainViewModel.getEmployees()
Mockito.verify(main, times(1)).onSuccess()
}
@Test
fun verify_on_onError_is_called() {
MainViewModel.mIMain = main
`when`(mDummy.getEmployees()).thenReturn(Observable.error(Throwable()))
mainViewModel.getEmployees()
Mockito.verify(main, times(1)).onError()
}
这是我要测试的 viewModel 类
class MainViewModel(private val mDummy: Dummy) : ViewModel() {
companion object {
lateinit var mIMain: IMain
}
interface IMain {
fun onSuccess()
fun onError()
}
fun getEmployees() {
mDummy.getEmployees()
.observeOn(SchedulerProvides.main())
.subscribeOn(SchedulerProvides.io())
.subscribe({ response ->
if (response.isSuccessful) {
mIMain.onSuccess()
} else {
mIMain.onError()
}
}, {
mIMain.onError()
})
}
这是我的 mainActivity 类 MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
MainViewModel.mIMain = mIMainViewModelIniliazed()
}
private fun mIMainViewModelIniliazed() = object :MainViewModel.IMain{
override fun onSuccess() {
}
override fun onError() {
}
}
解决方案
如果我错了,请纠正我,但我认为你的问题是因为你正在设置
MainViewModel.mIMain = main
在创建您的视图模型实例之前,不应该如下?
mainViewModel = MainViewModel(mDummy)
mainViewModel.mIMain = main
推荐阅读
- c# - 通过键 c# 字典的一部分获取值
- c# - 具有实体版本控制/事件溯源的存储库模式
- java - 硒中的多个选项卡
- python - Python 正则表达式仅匹配每个单词都大写的地方
- r - 大向量导致“sample.int(n, n * R, replace = TRUE) 中的错误:向量大小不能为 NA”但如何解决?
- instagram - 有没有办法获取 Instagram 帐户的关注者列表?
- width - 如何统一ggplot2中条的宽度?
- python - 函数中的 Ratiobutton 默认值
- django - DjangoCMS 中 AppHook 的使用权限
- docker - 在 RHEL8 上安装 kubernetes 致命:docker.service 未找到