我正在为我的应用程序编写单元测试,并且在编写它们时发现了“减速”。在测试 AndroidViewModel 的子类时,我缺少用于初始化的 Application 参数。我已经读过this question that uses Robolectric。
这是我到目前为止已经尝试过的:
我只想实例化我的AndroidViewModel类,以便可以调用它们的公共方法,但是需要Application参数。我该怎么办?
fun someTest() {
val testViewModel = MyViewModelThatExtendsFromAndroidViewModel(**missing application parameter**)
testViewModel.foo() // The code never reaches here as the testViewModel cant be initializated
}
答案 0 :(得分:5)
我遇到了同样的问题,并找到了两个解决方案。
您可以在测试目录中的单元测试中使用 Robolectric ,然后选择 platform Application 类。
PROVIDERS = [
...PROVIDERS,
/**
* Custom providers in development.
*/
// {
// provide: HTTP_INTERCEPTORS,
// useClass: MockHttpInterceptor,
// multi: true,
// },
];
或者您可以在androidTest目录中使用 InstrumentationTest ,并将 InstrumentationRegistry.getTargetContext()。applicationContext 转换为 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()
}
}
希望它有所帮助!