我有一个Spring-Boot应用程序,其中默认属性application.properties在类路径(src / main / resources / application.properties)中的文件中设置。
application.properties
我想用test.properties文件(src / test / resources / test.properties)中声明的属性覆盖JUnit测试中的一些默认设置。
test.properties
我通常为Junit测试提供专用的Config类,例如
package foo.bar.test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(CoreConfig.class) @EnableAutoConfiguration public class TestConfig { }
我首先认为@PropertySource("classpath:test.properties")在TestConfig类中使用将可以解决问题,但是这些属性不会覆盖application.properties设置(请参阅Spring- Boot参考文档-23-外部化配置)。
@PropertySource("classpath:test.properties")
然后我尝试-Dspring.config.location=classpath:test.properties在调用测试时使用。那很成功- 但我不想为每次测试执行都设置此系统属性。因此,我将其放入代码中
-Dspring.config.location=classpath:test.properties
@Configuration @Import(CoreConfig.class) @EnableAutoConfiguration public class TestConfig { static { System.setProperty("spring.config.location", "classpath:test.properties"); } }
不幸的是再次失败了。
关于如何application.properties使用test.properties我必须忽略的JUnit测试中的设置,必须有一个简单的解决方案。
您可以使用@TestPropertySource覆盖中的值application.properties。从其javadoc:
@TestPropertySource
测试属性源可用于有选择地覆盖系统和应用程序属性源中定义的属性
例如:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = ExampleApplication.class) @TestPropertySource(locations="classpath:test.properties") public class ExampleApplicationTests { }