2014-09-26 3 views
1

모든 테스트마다 @IntegrationTest 주석을 넣었으며 때로는이 속성을 사용하여 환경에 속성을 추가합니다. 모든 테스트를 함께 실행하면 첫 번째 @IntegrationTest 주석에서 발생한 속성 만 사용되므로 일부 테스트가 실패하는 것 같습니다. 해당 속성을 강제로 다시로드 할 수 있습니까? @IntegrationTest 주석이 "signifying that the tests are integration tests (and therefore require an application to startup "fully loaded" and listening on its normal ports)"되는 API 문서에 따르면스위트의 @IntegrationTest 속성은 다시로드되지 않습니다.

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

'@ IntegrationTest' 속성, 즉 어떤 테스트 클래스가 먼저로드되는지는 어떻게 결정합니까? – Paul

답변

3

봄 부팅 응용 프로그램은 모든 테스트에 대해 한 번만 시작됩니다. 이는 테스트 성능과 관련하여 좋은 점입니다. 다른 속성 집합에 다른 응용 프로그램을 시작하려면 다음과 같이 또 다른 봄 부팅 응용 프로그램 클래스를 작성해야합니다 : 통합 테스트에서

@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

:

는 내 사용의 예입니다.

다시로드 할 수있는 속성을 사용하려면 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

위는 전체 솔루션입니까? 나는 이것을 추가하려했지만 속성을 전혀 추가하지 않는 것 같습니다. 이 클래스를 실행하는 데 필요한 클래스 수준의 주석이 있습니까? –