Spring boot 使用springboot运行集成测试
我有几个繁重的Spring集成测试(是的,这不是最好的方法,我已经没有时间正确模拟所有外部DEP了) 下面是测试的典型注释Spring boot 使用springboot运行集成测试,spring-boot,spring-mvc,spring-test-mvc,Spring Boot,Spring Mvc,Spring Test Mvc,我有几个繁重的Spring集成测试(是的,这不是最好的方法,我已经没有时间正确模拟所有外部DEP了) 下面是测试的典型注释 @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @嵌入卡夫卡( 分区=1, brokerProperties={“log.dir=target/${random.int}/embedded kafka/data”}, 主题={ “${service.topic}”, “${service.dead lett
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@嵌入卡夫卡(
分区=1,
brokerProperties={“log.dir=target/${random.int}/embedded kafka/data”},
主题={
“${service.topic}”,
“${service.dead letter topic}”
})
@SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口)
MyHeavyIntegrationTests的公共类之一扩展了DatabaseBackedTest{
//为简洁起见省略
//
}
/db在测试中的基础
@ContextConfiguration(initializers=DatabaseBackedTest.Initializer.class)
公共抽象类DatabaseBackedTest{
私有静态final EmbeddedPostgresInfo db=EmbeddedPostgresDatabase.create().start();
静态类初始值设定项实现ApplicationContextInitializer{
@凌驾
public void初始化(ConfigurableApplicationContext上下文){
TestPropertyValues.of(“spring.datasource.url=“+db.getJdbcUrl()).applyTo(context.getEnvironment());
}
}
}
由于以下原因,测试会定期失败:
22:14:51.462 [main] INFO o.a.k.common.utils.AppInfoParser - Kafka version : 2.0.1
22:14:51.463 [main] INFO o.a.k.common.utils.AppInfoParser - Kafka commitId : fa14705e51bd2ce5
22:14:51.466 [main] WARN o.a.k.common.utils.AppInfoParser - Error registering AppInfo mbean
javax.management.InstanceAlreadyExistsException: kafka.server:type=app-info,id=0
at java.management/com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:436)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1855)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:955)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:890)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
at org.apache.kafka.common.utils.AppInfoParser.registerAppInfo(AppInfoParser.java:62)
at kafka.server.KafkaServer.startup(KafkaServer.scala:321)
at kafka.utils.TestUtils$.createServer(TestUtils.scala:132)
at kafka.utils.TestUtils.createServer(TestUtils.scala)
有两个问题:
1.让测试共存的正确方法是什么?我在surefire插件中设置了forkCount=0
。这似乎有帮助
@计划的@组件
2.2。我真的不需要在每次测试中启动卡夫卡消费者
谢谢 如果要使用kafka运行多个测试,可以在测试类上使用注释。这将告诉spring,此测试可能会与其他测试发生冲突,需要进行清理。您应该将它放在每个使用kafka的类上(在这个错误上)
如果在这些测试中有不需要的系统组件,请在服务器启动时使用注释将其替换为模拟