我有一个标准spring-boot
应用程序,我想在生产环境中使用MS SQL数据库,而对于集成测试,我想使用h2
数据库。问题是我无法找到,如何覆盖默认的application.properties
文件。即使我试图遵循一些教程,我也没有找到正确的解决方案......也许我只是错过了一些东西......
主要班级:
@SpringBootApplication
@EnableTransactionManagement
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication .class, args);
}
}
和带测试的课程:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebIntegrationTest
public class MessageControllerTest {
@Autowired
MessageRepository messageRepository;
...
...
...
@Test
public void testSomething(){
...
...
...
...
}
}
所以问题是,如何在运行测试时强制spring-boot使用application-test.properties
文件,而不是application.properties
,这应该在运行时使用。
我尝试将@WebIntegrationTest
注释替换为@TestPropertySource(locations="classpath:application-test.properties")
,但结果为java.lang.IllegalStateException: Failed to load ApplicationContext
。
答案 0 :(得分:2)
假设您的应用中有application-test.properties文件。
我是以两种方式做到的:
1.CLI JVM Args
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=test
在application.properties中添加spring.profiles.active=test
,它将加载你的application-test.properties文件。
@ActiveProfiles("test")
答案 1 :(得分:1)
实际上这很简单......经过几个小时的尝试,我意识到我只需要用@ActiveProfiles("test")
注释来注释我的测试类。
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebIntegrationTest
public class MessageControllerTest {
@Autowired
MessageRepository messageRepository;
...
...
...
@Test
public void testSomething(){
...
...
...
...
}
}