У меня есть интеграционный тест, который должен вызвать службу 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
Есть ли другой способ, которым я могу использовать Koin для инъекции своих классов в @BeforeClass
статический метод, подобный этому?