[SPRING] 스프링 테스트에서 환경 변수 또는 시스템 속성을 설정하는 방법?
SPRING스프링 테스트에서 환경 변수 또는 시스템 속성을 설정하는 방법?
배포 된 WAR의 XML Spring 구성을 확인하는 몇 가지 테스트를 작성하고 싶습니다. 불행하게도 일부 빈은 일부 환경 변수 또는 시스템 특성이 설정되도록 요구합니다. @ContextConfiguration과 함께 편리한 테스트 스타일을 사용할 때 스프링 빈이 초기화되기 전에 어떻게 환경 변수를 설정할 수 있습니까?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }
어노테이션으로 어플리케이션 컨텍스트를 구성하면 스프링 컨텍스트가 초기화되기 전에 내가 할 수있는 부분이 보이지 않습니다.
해결법
-
==============================
1.정적 초기화에서 System 속성을 초기화 할 수 있습니다.
정적 초기화에서 System 속성을 초기화 할 수 있습니다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:whereever/context.xml") public class TestWarSpringContext { static { System.setProperty("myproperty", "foo"); } }
정적 이니셜 라이저 코드는 스프링 응용 프로그램 컨텍스트가 초기화되기 전에 실행됩니다.
-
==============================
2.이것을하기위한 올바른 방법은 Spring 4.1부터 @TestPropertySource 주석을 사용하는 것입니다.
이것을하기위한 올바른 방법은 Spring 4.1부터 @TestPropertySource 주석을 사용하는 것입니다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:whereever/context.xml") @TestPropertySource(properties = {"myproperty = foo"}) public class TestWarSpringContext { ... }
Spring 문서와 Javadocs의 @TestPropertySource를 보라.
-
==============================
3.또한 ApplicationContextInitializer 테스트를 사용하여 시스템 속성을 초기화 할 수 있습니다.
또한 ApplicationContextInitializer 테스트를 사용하여 시스템 속성을 초기화 할 수 있습니다.
public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.setProperty("myproperty", "value"); } }
Spring 컨텍스트 설정 파일 위치 이외에 테스트 클래스에서 구성하십시오.
@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...) @RunWith(SpringJUnit4ClassRunner.class) public class SomeTest { ... }
모든 단위 테스트에 대해 특정 시스템 등록 정보를 설정해야하는 경우 코드 중복을 피할 수 있습니다.
-
==============================
4.시스템 특성을 VM 인수로 설정할 수 있습니다.
시스템 특성을 VM 인수로 설정할 수 있습니다.
프로젝트가 maven 프로젝트 인 경우 테스트 클래스를 실행하는 동안 다음 명령을 실행할 수 있습니다.
mvn test -Dapp.url="https://stackoverflow.com"
테스트 클래스 :
public class AppTest { @Test public void testUrl() { System.out.println(System.getProperty("app.url")); } }
Eclipse에서 개별 테스트 클래스 또는 메소드를 실행하려면 다음을 수행하십시오.
1) 실행 -> 실행 설정으로 이동합니다.
2) 왼쪽에서 Junit 섹션 아래에서 Test 클래스를 선택하십시오.
3) 다음을 수행하십시오.
-
==============================
5.모든 테스트에 대해 변수를 유효하게하려면 테스트 자원 디렉토리 (기본적으로 src / test / resources)에 application.properties 파일을 만들 수 있습니다.이 파일은 다음과 같습니다.
모든 테스트에 대해 변수를 유효하게하려면 테스트 자원 디렉토리 (기본적으로 src / test / resources)에 application.properties 파일을 만들 수 있습니다.이 파일은 다음과 같습니다.
MYPROPERTY=foo
@TestPropertySource 나 비슷한 메소드를 통해 정의하지 않는 한,이 메소드는로드되고 사용된다. 속성이로드되는 순서는 Spring documentation chapter 24에서 찾을 수있다. Externalized Configuration.
from https://stackoverflow.com/questions/11306951/how-to-set-environment-variable-or-system-property-in-spring-tests by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError : NULL 오류 (0) | 2019.02.06 |
---|---|
[SPRING] Spring MVC : 여러 URL을 동일한 컨트롤러에 매핑 (0) | 2019.02.06 |
[SPRING] SQL 쿼리를 사용한 동적 스프링 보안 (0) | 2019.02.06 |
[SPRING] 스프링 데이터의 다중 테이블에서 선택하기 (0) | 2019.02.06 |
[SPRING] Spring을 사용한 JSP 기반 템플릿 (0) | 2019.02.06 |