我的一个类具有 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 来注入这个依赖。这就是我定义模块的方式:
object AppModule {
@JvmField
val appModule = module {
single<IProfileRestService> { ProfileRestService() }
single<IProfileRepository> { ProfileRepository(androidContext(), get()) }
}
}
我在onCreate
我的 Application 类(用 Java 编写)的方法中启动 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)
}
我怎样才能使它作为一个具有真实上下文的仪器测试工作?