- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的一个类具有 Context 类型的依赖项。在将 Koin 添加到我的项目之前,我通过对我的 Application 类的硬依赖对其进行了初始化:
class ProfileRepository(
private var _context: Context? = null,
private var _profileRestService: IProfileRestService? = null
) : IProfileRepository {
init {
if (_context == null) {
_context = MyApplication.getInstance().applicationContext
}
}
现在,我想使用 Koin 来注入(inject)这个依赖项。这就是我定义模块的方式:
object AppModule {
@JvmField
val appModule = module {
single<IProfileRestService> { ProfileRestService() }
single<IProfileRepository> { ProfileRepository(androidContext(), get()) }
}
}
我在我的应用程序类(用 Java 编写)的 onCreate
方法中启动 Koin:
startKoin(singletonList(AppModule.appModule));
我想用仪器测试而不是单元测试来测试这个类,因为我想使用真实的上下文而不是模拟。这是我的测试:
@RunWith(AndroidJUnit4::class)
class MyTest : KoinTest {
private val _profileRepository by inject<IProfileRepository>()
@Test
fun testSomething() {
assertNotNull(_profileRepository)
}
测试失败并出现异常:
org.koin.error.BeanInstanceCreationException: Can't create definition for 'Single [name='IProfileRepository',class='com.my.app.data.profile.IProfileRepository']' due to error :
No compatible definition found. Check your module definition
如果我像这样模拟上下文,我可以让它与单元测试一起工作:
class MyTest : KoinTest {
private val _profileRepository by inject<IProfileRepository>()
@Before
fun before() {
startKoin(listOf(AppModule.appModule)) with mock(Context::class.java)
}
@After
fun after() {
stopKoin()
}
@Test
fun testSomething() {
assertNotNull(_profileRepository)
}
如何让它在真实环境中作为插桩测试工作?
最佳答案
代替(在申请中):
startKoin(applicationContext, modules)
使用模拟上下文:
startKoin(modules) with (mock(Context::class.java))
关于android - 如何在 Koin 的仪器测试中注入(inject)使用 androidContext 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54580907/
我正在使用两个库,它们具有两个不同版本的 Koin 的依赖项。 其中一个图书馆有 org.koin:koin-android:2.0.1 另一个有 io.insert-koin:koin-core-j
我偶然发现了一个问题,我必须重新初始化我的 Retrofit API 类,因为 URL 发生了变化,所以我想告诉 Koin 重新初始化单个依赖项。我不想使用工厂,因为大多数时候它仍然是单例。 停止和启
收到消息错误 java.lang.RuntimeException: Unable to create application com.app.name.application.MainApplica
我最近删除了 jcenter()来自项目级构建 Gradle 的存储库。 从那时起,Koin(版本:2.2.2)开始给我下面的编译时错误:Could not find org.koin:koin-co
我有一个带有 MVVM 的简单 Android 项目,我正在使用 Koin。这些是我在 gradle 中的版本和依赖项: build.gradle // Koin implementation "or
我有一个模块: single{ (name: String) -> Person(name) } 当我这样做时: val alice: Person by inject {parametersOf("
我想知道如何使用 Koin 库正确地确定依赖关系的范围。 由于谷歌推荐 single Activity architecture AndroidX Navigation lib已成为通过轻松交换 Fr
我正在尝试使用 Koin 制作一个 Android 玩具项目。 我的项目有一个存储库和两个数据源(远程/缓存)。 以下是数据源: interface DataSource class CacheDat
我是测试新手,我将 Koin 改编为我的依赖注入(inject)。我的应用程序运行良好。它仍然具有登录功能。这是我的依赖类 模块.kt val applicationModule = module (
我的android项目中有两个模块,app模块和lib模块。 这两个模块都需要 Koin 进行 D.I.,所以我调用 startKoin在 MyApplication应用模块中的类和IninKoint
在我的 android 应用程序中,我有一个标记为 base 的模块。 base 中有几个类充当生命周期的基类(Controller、ViewModel 等)。我的应用程序在我的项目中与这些本地类一起
我对 Koin 和“androidTest”有疑问。因为 androidTest 启动了应用程序,所以我不需要在测试中自己启动 Koin。 现在我需要注入(inject)一个模拟服务。问题是,我在单例
我在 Android 项目中使用 Koin 作为我的 DI 框架,我想对我的模块进行单元测试。 例如:如果类 A 依赖于 B 和 C,请测试 B 和 C 是否包含在 Koin 图中,以及我是否将它们正
我正在我的 android 应用程序中实现 Koin DI。我成功地创建了一些模块。但是我遇到了一个异常,我试图从模块中的另一个获取对象。 这些是我的模块 val networkModule = mo
我有一个包含不同模块的应用程序,但项目正在增长,我们需要将项目拆分为不同的动态功能模块,因为用户(可能)不需要所有功能。我的问题是 Koin 需要从 Application 类启动应用程序将要加载的所
我正在开发一个新闻应用程序,我想在应用程序类中添加两个模块,但出现以下异常。 java.lang.RuntimeException: Unable to create application yodg
我有一个应用程序,每次用户登录时都会将用户数据保存在 SharedPref 中,但是当用户在前一个帐户注销后使用另一个帐户登录后,koin 仍然会获取以前的用户数据。 我已经检查了我的 createS
在构建基于 Kotlin 的 HTTP 服务器时,我正在尝试使用 Koin。 我正在使用一个框架,您可以在其中通过扩展一些框架提供的抽象类来编写您想要的行为,并在组件生命周期的各个点填写您的实现逻辑(
我是 KotlinPoet 的新手,我找不到如何创建以下 Koin 模块语句: internal val apiModules = module { single { get().create
我正在尝试使用 Koin 作为我的 D.I 来实现权限注入(inject) 但是,当我执行需要 PermissionRepository 的 ViewModel 时,我一直收到错误消息。 No def
我是一名优秀的程序员,十分优秀!