Spring-boot,使用不同配置文件的JUnit测试
我正在尝试使用JUnit使用application.properties配置文件进行集成测试,以便检查两个不同的平台。
我尝试使用包含两个平台通用配置的基本配置文件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测试中是否有指定弹簧配置文件的特殊方法?实现我正在尝试的目标的最佳实践是什么?
解决方案
首先:将@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.properties
和src/test/resources/application-test.properties
。
相关文章