Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Koin DI Android单元测试视图模型_Android_Unit Testing_Koin - Fatal编程技术网

Koin DI Android单元测试视图模型

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

我在我的应用程序中使用了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>()
从视图模型中,我有空指针

这是我试过的测试类

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()