2012-05-30 5 views
5

부동산의 자리 표시 자 전에 나는 두 위치와 속성의 자리를 정의하는 주요 앱의 context.xml이 override location은 다른 프라퍼티 파일 (예 : "-DconfigOverride = file : /home/app/config.properties")을 덮어 써야하는 프라퍼티로 지정하는 것을 허용합니다.설정 시스템 등록 정보 또는 환경 변수 SpringJunit4ClassRunner

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:test-context.xml"}) 
public class UserServiceTest { 
    ... 
} 

어떻게 응용 프로그램 컨텍스트 전에 응용 프로그램 내에서 시스템 속성 또는 환경 변수를 설정할 수 있습니다로드 : 내 단위 테스트에 대한

, 나는 앱의 context.xml을 가져 테스트 컨텍스트를 사용하고 있습니다? 가능한 경우 명령 행 arg를 지정할 필요없이 모든 테스트 클래스에서 "-DconfigOverride = classpath : testConfig.properties"를 설정하는 것과 동일한 효과를 얻고 싶습니다. 의

답변

5

사고,

  1. SpringJUnit4ClassRunner을 확장하고 생성자에서 시스템을 특성 configOverride을 설정
  2. 그런 다음 @RunWith 여기
+0

제안에 감사드립니다 +1 - 나는 똑같은 생각을했지만 모든 테스트 클래스를 수정하기 전에 응용 프로그램 컨텍스트에서 수행 할 수있는 작업이 있는지 확인하려고했습니다. 테스트 컨텍스트에서는 몇 개의 bean을 오버라이드하지만 불행히도 여러 개의 속성 자리 표시자를 사용할 수 있으므로 속성 자리 표시자를 재정의 할 수 없습니다. – andy

3

ExtendedSpringJUnit4ClassRunner 전달/초기화 블록은 내가하고 결국 무엇 - I 단위 테스트 클래스를 변경할 필요가 없었습니다. 불행히도, 나는 "configOverride"속성을 설정하지 않았고 (AhamedMustafaM의 대답을 참고) 대신 원래의 속성 자리 표시 자 정의를 무시했다. (처음 실패한 시도 후에 다시 시도하여 작동하게했다.) "- 999"속성, 원래의 특성-자리 정의 (들) 우선 순위를 확인하는 데 사용됩니다

<!-- import the main app context --> 
<import resource="classpath:appContext.xml" /> 

<!-- this is the line i added --> 
<context:property-placeholder order="-999" 
     location="classpath:testConfig.properties" 
     ignore-unresolvable="true" /> 

참고 순서 =

나는 나의 testContext.xml에 다음 줄을 추가했다. 또한 "ignore-unresolvable"을 "true"로 설정하여 확인할 수없는 속성을 원래 자리 표시 자 구성자에게 위임합니다.

+0

여기에 자리가 있습니다. 나를 위해 잘 작동합니다. –

15

또 다른 대안은 @BeforeClass 주석이 달린 메소드에서 환경 등록 정보를 설정하는 것입니다.이 메소드는 컨텍스트 구성이 발생하기 전에 호출됩니다.

@BeforeClass 
public static void setSystemProps() { 
    System.setProperty("configOverride", "yourVal"); 
} 
+1

그리고'@ AfterClass'에서'System.clearProperty ("configOverride")' – vegemite4me

+0

지연된 응답을 드려 죄송합니다. 이것은 분명히 효과가있을 것입니다. 테스트 클래스에서 유일하게 하드 코딩 된 문자열을 스프링 컨텍스트 경로로 유지하려고했지만 때로는 불가능했습니다. – andy

0

내 문제는 유사하지만 나는 spring.profiles.active 환경 변수를 설정하고 싶어하고 난 그냥 테스트 자체에 원하는 값을 @ActiveProfiles()을 던질 필요가 있다고 밝혀졌다.

관련 문제