Примечание - я парень из Java + Spring, пробующий Kotlin + Micronaut.
Я пытаюсь использовать TestPropertyProvider
для установки свойств после запуска моей встроенной службы.
Работает нормально, пока в моем тестовом классе нет параметров конструктора.
Я могу добавить RxHttpClient
в качестве параметра конструктора, и он будет вставлен нормально.
Но я хотел бы добавить RxHttpClient
от Micronaut и также реализовать TestPropertyProvider
.
Я попытался добавить @Inject
к RxHttpClient
, но получил ошибку This annotation is not applicable to target 'local variable'
[потому что тело теста - лямбда, переданная суперклассу]
Без @Inject
я получаю ошибку lateinit property client has not been initialized
В моем базовом классе есть реализация TestPropertyProvider
.
abstract class ZeebeSpecification(body: AbstractStringSpec.() -> Unit): StringSpec(body), TestPropertyProvider {
override fun getProperties(): MutableMap<String, String> {
return mutableMapOf("orchestrator.management.client.brokerContactPoint" to IntegrationTestHarness.instance.getBroker())
}
}
TestPropertyProvider
работает, но RxHttpClient
не вводится
@MicronautTest
class ZeebeBroker1Test() : ZeebeSpecification({
@Client("/") lateinit var client: RxHttpClient;
...tests
}) {}
RxHttpClient
вводится, но TestPropertyProvider
не оценивается
@MicronautTest
class ZeebeBroker1Test(@Client("/" val client: RxHttpClient) : ZeebeSpecification({
...tests
}) {}
Я удалил базовый класс из уравнения и заставил свой тест напрямую реализовать TestPropertyProvider
, но он все равно не прошел.
@MicronautTest
class ZeebeBroker1Test(@Client("/") var client: HttpClient) : BehaviorSpec(), TestPropertyProvider {
init {
...tests
}
private fun getBroker(): String {
return IntegrationTestHarness.instance.getBroker()
}
override fun getProperties(): MutableMap<String, String> {
return mutableMapOf("orchestrator.management.client.brokerContactPoint" to getBroker())
}
}
Похоже, это такая же проблема, как эта, но я уже использую v1.1.2
https://github.com/micronaut-projects/micronaut-test/issues/82
Если я попытался использовать @Inject @Client("/") client: RxHttpClient
будет выдано сообщение об ошибке message: Missing bean argument [LoadBalancer loadBalancer] for type: io.micronaut.http.client.DefaultHttpClient. Required arguments: LoadBalancer
Как использовать TestPropertyProvider
и вводимый RxHttpClient
?