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

时间:2018-09-16 10:21:19

标签: java spring spring-boot junit integration-testing

我正在尝试使用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,希望它能够识别tensorflow应用程序配置文件,但不会从文件中读取: /src/test/resources/application-tensorflow.properties,也不会像主应用程序那样来自/src/main/resources/application-tensorflow.properties

在JUnit测试中是否有一种特殊的方法来指定弹性曲线?实现我正在尝试的最佳实践是什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

示例测试类:

@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

答案 1 :(得分:1)

您是否尝试用

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

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