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

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

我尝试使用包含两个平台通用配置的基本配置文件application.properties执行此操作,在此基础上,我为每个平台添加了具有特定平台配置的属性文件application-tensorflow.propertiesapplication-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测试中是否有指定弹簧配置文件的特殊方法?实现我正在尝试的目标的最佳实践是什么?


解决方案

首先:将@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

相关文章