Springboot和Maven:如何使用两个配置文件自动启动单元测试

时间:2019-08-03 16:54:20

标签: spring maven spring-boot spring-boot-test spring-boot-maven-plugin

  

此问题是问题"SpringBoot: how to run tests twice, with two different config files"的继续。

我以前使用Nothing[T]来编译项目。这样做,maven也会启动我的单元测试,我立即知道我的开发是否正确。

我实际上是在嵌入JMS连接的模块上工作。我的模块支持两种JMS总线:EMS和AMQ。 要使用的总线在我的模块的配置中指定

因此,我需要创建两个配置文件,一个用于EMS,一个用于AMQ。

但是,当我启动Maybe[T]时,我希望Maven使用两个配置文件(不仅是一个)来自动启动测试。我不想启动两次:<v-btn color="primary" rounded @click.prevent="startQuiz">Start</v-btn> methods:{ startQuiz(){ console.log('start') } }

谢谢您的帮助

4 个答案:

答案 0 :(得分:1)

您可以通过逗号分隔两个配置文件:

mvn clean install -Dspring.profiles.active=ems,amq

然后您将有两个活动的配置文件:

The following profiles are active: ems,amq

答案 1 :(得分:0)

您还可以在src/test/resources/application.properties中指定每次运行Spring测试时适用的特定属性。对我来说,比在Maven命令行上指定它们更干净。对于您的情况:

spring.profiles.active=ems,amq

答案 2 :(得分:0)

我认为有一个误会;看来,当我使用spring.profiles.active=ems,amq运行测试时:

  • 所有测试一次启动
  • 两个配置文件均已启用

我想要的与众不同:

  • 两次启动所有测试
  • 第一次启用ems(并且只有ems)个人资料
  • 第二次启用了amq(并且只有amq)配置文件

目前,我没有成功找到解决方案; evey线索受到欢迎

致谢

答案 3 :(得分:0)

我找到了解决问题的方法;一种基于以下技巧:

  • 重载SpringJUnit4ClassRunner
  • 重新定义run()方法,以便:

    1. 致电强制使用第一个配置文件
    2. 调用原始的run()方法
    3. 对其他个人资料执行相同操作

public class MultiProfileTestRunner extends SpringJUnit4ClassRunner {
...


public void run(RunNotifier notifier) {
    System.setProperty("spring.profiles.active", "ems");
    super.run(notifier);

    System.setProperty("spring.profiles.active", "amq");
    super.run(notifier);
}

在两次调用super.run()之间,我们必须“强制” Spring重新加载其上下文,否则将不考虑配置文件更改

我是通过在测试中使用注解@DirtiesContext(classMode = AFTER_CLASS)来实现的