问题描述
我的 Quarkus 单元测试:
@QuarkusTest
@QuarkusTestResource(KafkaResource.class)
public class CreditStatusUnitTest {
@Test
public void testCreditStatus() {
given().when()
.request()
.contentType(ContentType.JSON)
.body("{hello: world}")
.post("/CreditStatus")
.then().statusCode(200)
.body(is("{\"code\":200,\"message\":\"success\"}"));
}
}
/CreditStatus api 接收 POST 消息并将其发送给 kafka,然后返回 HTTP 200。
我的kafka测试资源类:
public class KafkaResource implements QuarkusTestResourceLifecycleManager {
private final KafkaContainer kafka = new KafkaContainer();
@Override
public Map<String,String> start() {
kafka.start();
return Collections.singletonMap("kafka.bootstrap.servers",kafka.getBootstrapServers());
}
@Override
public void stop() {
kafka.close();
}
}
src/main/resources/application.properties 中的 Kafka 配置:
%dev.kafka.bootstrap.servers=localhost:9092
%test.kafka.bootstrap.servers=${KAFKA_BOOTSTRAP:localhost:9092}
%prod.kafka.bootstrap.servers=${KAFKA_BOOTSTRAP:localhost:9092}
mp.messaging.outgoing.credit-status-out.connector=smallrye-kafka
mp.messaging.outgoing.credit-status-out.topic=credit-status
mp.messaging.outgoing.credit-status-out.value.serializer=org.apache.kafka.common.serialization.StringSerializer
mp.messaging.outgoing.credit-status-out.health-readiness-enabled=true
mp.messaging.outgoing.credit-status-out.health-enabled=true
mp.messaging.connector.smallrye-kafka.client.id=my-credit-status-client
在 pom.xml 中测试容器依赖:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>1.15.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>kafka</artifactId>
<version>1.15.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>1.15.3</version>
<scope>test</scope>
</dependency>
当我通过以下方式运行此测试时:
mvn -Dtest=CreditStatusUnitTest test
它永远卡住了:
...
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.....CreditStatusUnitTest
Jun 30,2021 12:33:21 PM org.jboss.threads.Version <clinit>
INFO: JBoss Threads version 3.2.0.Final-redhat-00003
Jun 30,2021 12:33:22 PM io.quarkus.micrometer.deployment.binder.mpmetrics.MicroprofileMetricsProcessor logWarningForMpMetricsUsage
WARN: This application uses the MP Metrics API. The micrometer extension currently provides a compatibility layer that supports the MP Metrics API,but metric names and recorded values will be different. Note that the MP Metrics compatibility layer will move to a different extension in the future.
Jun 30,2021 12:33:22 PM io.quarkus.arc.processor.BeanArchives index
WARN: Failed to index int: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader
如果我注释掉 @QuarkusTestResource(KafkaResource.class)
,测试使用我的本地 kafka 实例并且工作正常。我发现当 localhost:9092 的 kafka 实例不可用时,我的应用程序无法启动,不确定是否是这个原因。
我在这里错过了什么?如何告诉 Quarkus 与应用程序一起启动 Kafka testcontainer 并使用 kafka testcontainer 地址和端口替换 application.properties 中的配置?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)