Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
Android 运行类时,单元测试总是失败_Android_Unit Testing_Kotlin_Mockito - Fatal编程技术网

Android 运行类时,单元测试总是失败

Android 运行类时,单元测试总是失败,android,unit-testing,kotlin,mockito,Android,Unit Testing,Kotlin,Mockito,当我运行这个类时,我总是在方法verify\u on\u success\u中得到test failed(),并带有错误 实际上,与此模拟没有任何交互。 但若我只运行方法,测试将通过 @Mock lateinit var mDummy: Dummy private lateinit var mainViewModel: MainViewModel @Mock lateinit var main: MainViewModel.IMain @Before @Throws(Exception::

当我运行这个类时,我总是在方法
verify\u on\u success\u中得到test failed()
,并带有错误

实际上,与此模拟没有任何交互。

但若我只运行方法,测试将通过

@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()
}
这是我的主要活动 类MainActivity:AppCompatActivity(){


如果我错了,请纠正我,但我认为您的问题是因为您正在设置

MainViewModel.mIMain = main
在创建viewmodel实例之前,不应该如下所示

mainViewModel = MainViewModel(mDummy)
mainViewModel.mIMain = main

尝试将代码从setup()移动到tests@Eugene你能给我更多的解释为什么我必须将设置从
@Before
更改为
@Test
?我没有说你应该在测试之前切换。为了理解这个问题,我建议删除fun setup()并在测试中初始化所有内容。现在,您可以在2安装和测试中初始化MainViewModel.miMain。您还可以使用全局对象,它们的状态在所有测试之间共享,因此很难在任何时间点跟踪状态,当您解决问题时,您可以删除fun setup
setup()
用于初始化mock、viewmodel等。因此,删除它并不是这里的问题。我的方法
验证错误名为()仍然通过测试。<代码> MistVIEWMDE.MIMAN =主< /代码>用于初始化从活动到VIEW模型的接口。所以这不是问题。@ Alibana Thats不正确。当空/无/任何异常被返回或触发时,您的类可以有一个默认的行为来返回<代码> OnError < /代码>。考虑这个答案并尝试它。t、 我已经更改了代码,并从另一个方法添加了侦听器。仍然会收到相同的错误。我现在已经添加了完整的代码。
MainViewModel.mIMain = main
mainViewModel = MainViewModel(mDummy)
mainViewModel.mIMain = main