我在每个测试中都添加了@IntegrationTest
注释,有时我会使用它来向环境添加属性。当一起运行所有测试时,似乎只使用第一个@IntegrationTest
注释中遇到的属性,因此某些测试失败。有没有办法强制重新加载这些属性?
这是我的一个例子:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes=TestApplication.class)
@WebAppConfiguration
@IntegrationTest("some.property=true")
public class SomeIntegrationTest {
答案 0 :(得分:3)
正在测试的Spring Boot应用程序只针对所有测试启动一次,这对于测试性能来说是一件好事。如果要使用不同的属性集启动另一个应用程序,则必须编写另一个Spring Boot应用程序类,如下所示:
@Configuration
@EnableAutoConfiguration
public class MetricsTestApplication {
public static void main(String[] args) {
SpringApplication.run(MetricsTestApplication.class, args);
}
}
在集成测试中,您引用其他类。此外,您必须设置与第一个应用程序不同的端口,并且可以添加与第一个应用程序的属性不同的属性:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes=MetricsTestApplication.class)
@WebAppConfiguration
@IntegrationTest({"server.port=8091","batch.metrics.enabled=true"})
我们使用不同属性集的MetricsTestApplication现在在端口8091下启动。
答案 1 :(得分:0)
根据API文档@IntegrationTest注释为"signifying that the tests are integration tests (and therefore require an application to startup "fully loaded" and listening on its normal ports)"。
如果要使用可重新加载的属性,则应使用EnvironmentTestUtils。
例如
@Autowired
Environment env;
@Autowired
ConfigurableApplicationContext ctx;
@Before
public void before() {
EnvironmentTestUtils.addEnvironment(ctx, "test.value:myValue");
}
@Test
public void testGreeting() {
assertThat(env.getProperty("test.value"), comparesEqualTo("myValue"));
}