首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用springboot运行集成测试

使用springboot运行集成测试
EN

Stack Overflow用户
提问于 2019-10-12 21:09:44
回答 1查看 550关注 0票数 1

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

下面是测试的典型注释

代码语言:javascript
复制
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@EmbeddedKafka(
        partitions = 1,
        brokerProperties = {"log.dir=target/${random.int}/embedded-kafka/data"},
        topics = {
                "${service.topic}",
                "${service.dead-letter-topic}"
        })
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class OneOfMyHeavyintegrationTests extends DatabaseBackedTest {

// omitted for brevity
//
}

// foundation for DB in tests
@ContextConfiguration(initializers = DatabaseBackedTest.Initializer.class)
public abstract class DatabaseBackedTest {

    private static final EmbeddedPostgresInfo db = EmbeddedPostgresDatabase.create().start();

    static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext context) {
            TestPropertyValues.of("spring.datasource.url=" + db.getJdbcUrl()).applyTo(context.getEnvironment());
        }
    }

}

测试定期失败,原因是

代码语言:javascript
复制
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.使测试共存的正确方法是什么?我把forkCount=0设置在了万无一失的插件中。这似乎很有帮助

  1. 在开始测试之前,mock / disable组件的正确方法是什么?

2.1。我真的不需要在每次测试中启动所有的@Scheduled @Component

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-12 21:16:20

如果您想使用kafka运行几个测试,可以在测试类上使用DirtiesContext注释。这将告诉春天,这个测试所做的事情可能会与其他人发生冲突,需要清理。您应该把它放在每个使用kafka的类上(在这个错误上)

如果您的系统组件在这些测试中不需要,那么在服务器启动时使用MockBean注释来替换它们

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58358541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档