Alf*_*ano 2 android unit-testing
我正在为我的应用程序编写单元测试,并且在写入时我发现了"减速带".在测试AndroidViewModel的子类时,我缺少用于初始化的Application参数.我已经读过这个使用Robolectric的问题了.
这是我到目前为止已经尝试过的:
我只是想实现我的AndroidViewModel类,所以我可以调用它们的公共方法,但是需要Application参数.我能为此做些什么?
fun someTest() {
   val testViewModel = MyViewModelThatExtendsFromAndroidViewModel(**missing application parameter**)
   testViewModel.foo() // The code never reaches here as the testViewModel cant be initializated
}
Run Code Online (Sandbox Code Playgroud)
    我遇到了同样的问题,并找到了两个解决方案.
您可以在单元测试中使用Robolectric,在测试目录中,并选择平台Application类.
@RunWith(RobolectricTestRunner::class)
@Config(application = Application::class)
class ViewModelTest {
    @Test
    @Throws(Exception::class)
    fun someTest() {
        val application = RuntimeEnvironment.application
        val testViewModel = MyViewModelThatExtendsFromAndroidViewModel(application)
        testViewModel.foo()
    }
}
Run Code Online (Sandbox Code Playgroud)
或者您可以在androidTest目录中使用InstrumentationTest,并将InstrumentationRegistry.getTargetContext().applicationContext强制转换为Application:
@RunWith(AndroidJUnit4::class)
class ViewModelTest {
    @Test
    @Throws(Exception::class)
    fun someTest() {
        val application = InstrumentationRegistry.getTargetContext().applicationContext as Application
        val testViewModel = MyViewModelThatExtendsFromAndroidViewModel(application)
        testViewModel.foo()
    }
}
Run Code Online (Sandbox Code Playgroud)
希望它有所帮助!
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           855 次  |  
        
|   最近记录:  |