【发布时间】:2021-07-22 03:37:18
【问题描述】:
我有一个包含多个模块(父、服务、updater1、updater2)的多模块 maven 项目。 @SpringBootApplication 位于“服务”模块中,其他模块没有工件。
'updater1' 是一个具有 Kafka 侦听器和 http 客户端的模块,当接收到 kafka 事件时,会向外部 API 发起请求。我想使用testcontainers 在此模块中创建集成测试,因此我创建了容器和 Kafka 生产者以将 KafkaTemplate 发送给我的消费者。
我的问题是 Kafka 生产者自动装配为 null,因此测试会抛出 NullPointerException。我想应该是Spring配置的问题,但是找不到问题。你能帮助我吗?谢谢!
这是我的测试课:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {KafkaConfiguration.class, CacheConfiguration.class, ClientConfiguration.class})
public class InvoicingTest {
@ClassRule
public static final Containers containers = Containers.Builder.aContainer()
.withKafka()
.withServer()
.build();
private final MockHttpClient mockHttpClient =
new MockHttpClient(containers.getHost(SERVER),
containers.getPort(SERVER));
@Autowired
private KafkaEventProducer kafkaEventProducer;
@BeforeEach
@Transactional
void setUp() {
mockHttpClient.reset();
}
@Test
public void createElementSuccesfullResponse() throws ExecutionException, InterruptedException, TimeoutException {
mockHttpClient.whenPost("/v1/endpoint")
.respond(HttpStatusCode.OK_200);
kafkaEventProducer.produce("src/test/resources/event/invoiceCreated.json");
mockHttpClient.verify();
}
这是事件制作者:
@Component
public class KafkaEventProducer {
private final KafkaTemplate<String, String> kafkaTemplate;
private final String topic;
@Autowired
KafkaInvoicingEventProducer(KafkaTemplate<String, String> kafkaTemplate,
@Value("${kafka.topic.invoicing.name}") String topic){
this.kafkaTemplate = kafkaTemplate;
this.topic = topic;
}
public void produce(String event){
kafkaTemplate.send(topic, event);
}
}
【问题讨论】:
-
您可以使用嵌入式 kafka 进行 kafka 测试。 link
-
我需要使用测试容器
标签: java spring maven multi-module testcontainers