2014-09-26 65 views
1

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

这是我使用的例子:

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

你如何确定使用哪个'@ IntegrationTest'属性,即哪个测试类首先被加载? – Paul 2014-12-04 18:59:22

回答

3

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.

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")); 
} 
+0

以上是整个解决方案吗?我试图添加这个,但它似乎并没有添加属性。是否有一个应该让这个运行的类级别的注释? – 2014-11-10 01:54:23