Coin DI Android 单元测试 ViewModel
Koin DI Android Unit testing ViewModel
我在我的应用程序中使用了 Koin DI,一切正常。我已经毫无问题地注入了 viewModels。
例如,我有一个具有以下功能的 calcViewModel:
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>()
正如我所说,一切正常,但是当我尝试为此功能编写一个简单的单元测试时
fun calculateNumber(): Int{
var a = 5 + 3
return a
}
从视图模型我有空指针。
这是测试Class我试过了
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!
此外,如果我在测试 class 中使用相同的方式获取 viewModel,就像在应用程序中一样:
val calcViewModel by viewModel<CalcViewModel>()
它使用不同的构造函数,要求 3 个参数(class、所有者、范围)
我在gradle中也输入了:
testImplementation "org.koin:koin-androidx-viewmodel:$koin_version"
testImplementation "org.koin:koin-test:$koin_version"
有人试过用 Koin 和 viewModels 编写单元测试吗?
谢谢
最后我只是初始化了viewModel并使用了实例。
private lateinit var viewModel: CalcViewModel
及稍后在 setUp()
viewModel = CalcViewModel()
我在我的应用程序中使用了 Koin DI,一切正常。我已经毫无问题地注入了 viewModels。
例如,我有一个具有以下功能的 calcViewModel:
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>()
正如我所说,一切正常,但是当我尝试为此功能编写一个简单的单元测试时
fun calculateNumber(): Int{
var a = 5 + 3
return a
}
从视图模型我有空指针。
这是测试Class我试过了
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!
此外,如果我在测试 class 中使用相同的方式获取 viewModel,就像在应用程序中一样:
val calcViewModel by viewModel<CalcViewModel>()
它使用不同的构造函数,要求 3 个参数(class、所有者、范围)
我在gradle中也输入了:
testImplementation "org.koin:koin-androidx-viewmodel:$koin_version"
testImplementation "org.koin:koin-test:$koin_version"
有人试过用 Koin 和 viewModels 编写单元测试吗?
谢谢
最后我只是初始化了viewModel并使用了实例。
private lateinit var viewModel: CalcViewModel
及稍后在 setUp()
viewModel = CalcViewModel()