我正在为我的应用程序编写单元测试,并且在编写它们时遇到了一些问题。 在测试AndroidViewModel的子类时,我缺少其初始化的 Application 参数。 我已经阅读了这篇使用Robolectric的文章。
这是我迄今为止尝试过的方法:
这是我迄今为止尝试过的方法:
- 如问题描述使用Robolectric。据我所知,Robolectric可以用于测试您的自定义Application类,但我没有使用自定义的应用程序类,因为我不需要它(该应用程序并不那么复杂)。
- 使用mockito。Mockito引发异常,指出无法模拟Context类。
- 使用InstrumentationRegistry。将测试类从test文件夹移动到androidTest文件夹,以便访问 androidTestImplementation 依赖项,我尝试使用InstrumentationRegistry.getContext()并将其转换为Application,当然这样做不起作用,会抛出一个类型转换异常。 尽管我感到很愚蠢,但还是值得一试。
fun someTest() {
val testViewModel = MyViewModelThatExtendsFromAndroidViewModel(**missing application parameter**)
testViewModel.foo() // The code never reaches here as the testViewModel cant be initializated
}
InstrumentationRegistry.getTargetContext()
现在已经被弃用,可以使用更易于阅读的ApplicationProvider.getApplicationContext()
代替 :-) - IainCunningham