Как мне обработать KafkaTemplate при использовании ScalaTest? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть простая конфигурация 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(_, _)

Так что, если кто-то может дать мне версию аннотации, я дам им чек.

...