套件中的@IntegrationTest属性不会重新加载

时间:2014-09-26 07:28:42

标签: spring-boot spring-test

我在每个测试中都添加了@IntegrationTest注释,有时我会使用它来向环境添加属性。当一起运行所有测试时,似乎只使用第一个@IntegrationTest注释中遇到的属性,因此某些测试失败。有没有办法强制重新加载这些属性?

这是我的一个例子:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes=TestApplication.class)
@WebAppConfiguration
@IntegrationTest("some.property=true")
public class SomeIntegrationTest {

2 个答案:

答案 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"));
}