Spring boot 使用springboot运行集成测试

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

我有几个繁重的Spring集成测试(是的,这不是最好的方法,我已经没有时间正确模拟所有外部DEP了)

下面是测试的典型注释


@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.1。在每次测试期间,我实际上不需要启动所有的
    @计划的
    @组件

    2.2。我真的不需要在每次测试中启动卡夫卡消费者


    谢谢

    如果要使用kafka运行多个测试,可以在测试类上使用注释。这将告诉spring,此测试可能会与其他测试发生冲突,需要进行清理。您应该将它放在每个使用kafka的类上(在这个错误上)

    如果在这些测试中有不需要的系统组件,请在服务器启动时使用注释将其替换为模拟