我有一个集成测试,需要在运行任何后续测试之前调用 REST 服务以获取访问令牌一次。在将 Koin 添加到我的项目之前,我在一个带有@BeforeClass
如下注释的静态方法中完成了这项工作:
class PersonRepositoryIntegrationTest {
companion object {
private var _clientToken: String? = null
@BeforeClass
@JvmStatic
fun setup() {
_clientToken = AuthRepository().getClientToken()!!.accessToken
}
}
@Test
fun testCreatePerson() {
PersonRepository().createPerson(_clientToken)
}
AuthRepository 和 PersonRepository 有额外的依赖关系,到目前为止,这些依赖关系是在它们的构造函数中实例化的。现在,我想使用 Koin 通过注入存储库来解决这些依赖关系:
class PersonRepositoryIntegrationTest : KoinTest {
companion object {
private val _authRepository by inject<IAuthRepository>()
private val _personRepository by inject<IPersonRepository>()
private var _clientToken: String? = null
@BeforeClass
@JvmStatic
fun beforeClass() {
startKoin(listOf(AppModule.appModule))
_clientToken = _authRepository.getClientToken()!!.accessToken
}
}
当我尝试inject
在伴生对象中使用时,编译器会报错:
Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch.
* public inline fun <reified T : Any> KoinComponent.inject(name: String = ..., scope: Scope? = ..., noinline parameters: ParameterDefinition = ...): Lazy<IAuthRepository> defined in org.koin.standalone
@BeforeClass
还有另一种方法可以使用 Koin 以这样的静态方法注入我的类吗?