У меня есть простая конфигурация Spring (с использованием Scala), которая обрабатывает производителя Kafka, код выглядит примерно так ...
@Configuration class CommonConfiguration @Autowired()( producer: KafkaTemplate[Object, Object] ) {
def buildMessage(msg: SimpleMessage, topic: String): Message[SimpleMessage] = ...
def sendMessage(payload: String, topic: String): Unit = {
...
}
...
}
Я пытаюсь проверить это, но когда я пытаюсь код, который выглядит следующим образом ...
@ContextConfiguration(
classes = Array(classOf[CommonConfiguration]),
loader = classOf[AnnotationConfigContextLoader])
@TestPropertySource(locations = Array("classpath:application-test.yml"))
@ActiveProfiles(Array("test"))
trait SpringTest extends BeforeAndAfterEach { this: Suite =>
override def beforeEach(): Unit = {
new TestContextManager(classOf[SpringTest]).prepareTestInstance(this)
super.beforeEach()
}
}
class CommonConfigurationSpec extends FlatSpec with SpringTest with GivenWhenThen with Matchers with MockitoSugar{
@Autowired
val app: CommonConfiguration = null
"When I send a message we " should " build it using the information provided" in {
...
}
}
Но когда я запускаю, я получаю следующую ошибку ...
Cause: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.kafka.core.KafkaTemplate<java.lang.Object, java.lang.Object>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Как мне это исправить, чтобы KafkaTemplate получал Autowired правильно?
Обновление
Если я перехожу на ...
classes = Array(classOf[CommonConfiguration], classOf[KafkaTemplate]),
Я получаю ...
error: class KafkaTemplate takes type parameters
Также я пытался ...
classes = Array(classOf[CommonConfiguration], classOf[KafkaTemplate[Object, Object]]),
и получил ...
Cause: java.lang.NoSuchMethodException: org.springframework.kafka.core.KafkaTemplate.<init>()
Я могу заставить его работать так, но я бы предпочел использовать Autowire. Вместо Autowired я делаю это ...
val template: KafkaTemplate[Object, Object] = Mockito.mock(classOf[KafkaTemplate[Object, Object]])
val app: CommonConfiguration = new CommonConfiguration(template)
val spyVal : CommonConfiguration = Mockito.spy(app)
...
Mockito.verify(spyVal).buildMessage(_, _)
Так что, если кто-то может дать мне версию аннотации, я дам им чек.