如何在没有“A KoinContext 已启动”的情况下使用 KoinTestRule?

Posted

技术标签:

【中文标题】如何在没有“A KoinContext 已启动”的情况下使用 KoinTestRule?【英文标题】:How to use KoinTestRule without getting "A KoinContext is already started"? 【发布时间】:2020-07-31 18:54:32 【问题描述】:

我正在尝试使用 Koin 的测试规则来启动和停止带有测试模块的 Koin,但是每次我尝试使用此规则或 startKoin() 时,我都会得到“A KoinContext 已经启动”。我最初在应用程序类中启动 Koin,这可能与该问题有关,但我不确定自己如何解决这个问题。对此问题的任何帮助将不胜感激。

应用:

override fun onCreate() 
    super.onCreate()

    startKoin 
        androidContext(this@Application)
        modules(repositoryModule, daoModule, viewModelModule, wrapperModule)
    

测试:

@get:Rule
val koinTestRule = KoinTestRule.create 
    modules(repositoryTestModule)

存储库测试模块:

val repositoryTestModule = module 
    single<JournalRepository>  FakeJournalRepository() 

【问题讨论】:

你用的是什么测试框架? 【参考方案1】:

我设法通过创建自定义测试应用程序并覆盖 onCreate 和 onTerminate 方法,分别启动和停止 Koin 来解决此问题。通过不在应用程序中加载任何模块,我可以加载每个类所需的模块。

如果有更好的解决方案,我很乐意听到。谢谢

【讨论】:

你有没有找到更好的选择?

以上是关于如何在没有“A KoinContext 已启动”的情况下使用 KoinTestRule?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 createSlice 的情况下使用 createThunkAsync

我如何在没有订单的情况下填充托盘架存储?

如何在没有没有索引的 url 的情况下调用 codeigniter 控制器功能

如何在没有 UITableViewController 的情况下结束 UIRefreshControl

如何在没有 GPU 的情况下运行 tensorflow?

如何在没有'id'列的MySql中获取最后插入的记录?