Koin DI Android单元测试视图模型
我在我的应用程序中使用了Koin DI,一切正常。我注入了viewModels,没有任何问题 例如,我有一个calcViewModel,其函数为:Koin DI Android单元测试视图模型,android,unit-testing,koin,Android,Unit Testing,Koin,我在我的应用程序中使用了Koin DI,一切正常。我注入了viewModels,没有任何问题 例如,我有一个calcViewModel,其函数为: class CalcViewModel(): ViewModel() { fun calculateNumber(): Int{ var a = 5 + 3 return a } } 在应用程序中,我是这样使用它的: class Application : Application() { ov
class CalcViewModel(): ViewModel() {
fun calculateNumber(): Int{
var a = 5 + 3
return a
}
}
在应用程序中,我是这样使用它的:
class Application : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
// androidContext(this@MyApp)
androidLogger(Level.DEBUG)
androidContext(this@Application)
modules(
listOf(
myModule
)
)
}
在我的appModule文件中:
val myModule= module {
viewModel { CalcViewModel() }
}
在应用程序中,每当我需要viewModel实例时,我只需使用:
private val calcViewModel by viewModel<CalcViewModel>()
从视图模型中,我有空指针
这是我试过的测试类
class CalcViewModelTest: KoinTest{
val calcViewModel:CalcViewModel by inject()
@Before
fun setup() {
startKoin {
module { single { myModule} }
}
}
@Test
fun calculateNumber(){
val result = calcViewModel.calculateNumber() // here I get that error when trying to access calcViewModel var
Assert.assertEquals(result,8)
}
@After
fun tearDown() {
stopKoin()
}
}
每次我在尝试运行单元测试时出现此错误:
org.koin.core.error.NoBeanDefFoundException: No definition found for
class:'com.package.CalcViewModel'. Check your definitions!
另外,如果我使用与应用程序中相同的方法在测试类中获取viewModel:
val calcViewModel by viewModel<CalcViewModel>()
有人试过用Koin和viewModels编写单元测试吗
谢谢最后,我刚刚初始化了viewModel并使用了实例
private lateinit var viewModel: CalcViewModel
以及稍后的设置()
最后,我初始化了viewModel并使用了实例
private lateinit var viewModel: CalcViewModel
以及稍后的设置()
不应该这样module@Blackbelt这只是加载模块的另一种方式,如果您像我一样使用模块,您可以添加一个模块,如果使用模块,它需要一个模块列表。我也尝试了模块列表,但没有成功。在应用程序中工作得很好,但我无法对其进行单元测试。文档中说要使用
模块
而不是模块
,使用startKoin
<代码>模块似乎是要声明(创建)一个模块,但我在这方面没有太多经验koin@Blackbelt我也尝试过这样做,只是为了1000%确定,startKoin{modules(listOf(myModule))}和前面一样的错误module@Blackbelt这只是加载模块的另一种方式,如果您像我一样使用模块,您可以添加一个模块,如果使用模块,它需要一个模块列表。我也尝试了模块列表,但没有成功。在应用程序中工作得很好,但我无法对其进行单元测试。文档中说要使用模块
而不是模块
,使用startKoin
<代码>模块似乎是要声明(创建)一个模块,但我在这方面没有太多经验koin@Blackbelt我也尝试过这样做,只是为了1000%确定,startKoin{modules(listOf(myModule))}和以前一样的错误。
private lateinit var viewModel: CalcViewModel
viewModel = CalcViewModel()