Spring-boot,使用不同配置文件的 JUnit 测试

Posted

技术标签:

【中文标题】Spring-boot,使用不同配置文件的 JUnit 测试【英文标题】:Spring-boot, JUnit tests using different profiles 【发布时间】:2019-02-20 12:22:36 【问题描述】:

我正在尝试使用 application.properties 配置文件进行使用 JUnit 的集成测试,以检查两个不同的平台。

我尝试使用包含两个平台的通用配置的基本配置文件application.properties 这样做,除此之外,我还为每个平台添加了属性文件application-tensorflow.properties application-caffe.properties,它们具有特定的平台配置,但我发现它在 JUnit 中的工作方式与我在主应用程序中使用的方法不同。

我的测试配置类如下所示:

@Configuration
@PropertySource("classpath:application.properties")
@CompileStatic
@EnableConfigurationProperties
class TestConfig ...

我正在使用@PropertySource("classpath:application.properties"),所以它会识别我的基本配置,在那里我还写了spring.profiles.active=tensorflow,希望它能识别张量流应用程序配置文件,但它不会从文件中读取:/src/test/resources/application-tensorflow.properties,也不像在主应用程序中那样来自/src/main/resources/application-tensorflow.properties

在 JUnit 测试中是否有特殊的方法来指定弹簧配置文件?实现我想要做的事情的最佳实践是什么?

【问题讨论】:

【参考方案1】:

首先:将@ActiveProfiles 添加到您的测试类以定义活动配置文件。

另外,您需要配置应该加载的配置文件。有两种选择:

在与@ContextConfiguration(classes = TheConfiguration.class, initializers = ConfigFileApplicationContextInitializer.class) 的简单集成测试中 在完整的 Spring Boot 测试中使用 @SpringBootTest

示例测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles( "test" )
public class DummyTest 

    @Autowired
    private Environment env;

    @Test
    public void readProps() 
        String value = env.getProperty("prop1") + " " + env.getProperty("prop2");
        assertEquals("Hello World", value);
    

现在评估文件src/test/resources/application.propertiessrc/test/resources/application-test.properties

【讨论】:

【参考方案2】:

您是否尝试过使用

注释您的测试
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = "tensorflow")

还要确保 application-tensorflow.properties 在 /src/test/resources 下

【讨论】:

是的,我不明白为什么在我指定了许多变体的配置文件后它不访问 tensorflow.application 文件。 您是否使用 @SpringBootTest 和 @RunWith(SpringRunner.class) 注释了您的测试? application-tensorflow.properties 在 /src/test/resources 下吗? 是的,就是这样。如果您愿意,请将此建议写为答案,我会将其标记为问题解决者。

以上是关于Spring-boot,使用不同配置文件的 JUnit 测试的主要内容,如果未能解决你的问题,请参考以下文章

Spring-boot之jQuery File Upload后台配置方法

spring-boot配置文件使用

spring-boot 速成 profile区分环境

日常错误spring-boot配置文件读取不到

Spring-Boot 仅在一个配置文件中执行 data.sql

spring-boot中logback日志配置