복붙노트

[SPRING] 스프링 테스트에서 환경 변수 또는 시스템 속성을 설정하는 방법?

SPRING

스프링 테스트에서 환경 변수 또는 시스템 속성을 설정하는 방법?

배포 된 WAR의 XML Spring 구성을 확인하는 몇 가지 테스트를 작성하고 싶습니다. 불행하게도 일부 빈은 일부 환경 변수 또는 시스템 특성이 설정되도록 요구합니다. @ContextConfiguration과 함께 편리한 테스트 스타일을 사용할 때 스프링 빈이 초기화되기 전에 어떻게 환경 변수를 설정할 수 있습니까?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }

어노테이션으로 어플리케이션 컨텍스트를 구성하면 스프링 컨텍스트가 초기화되기 전에 내가 할 수있는 부분이 보이지 않습니다.

해결법

  1. ==============================

    1.정적 초기화에서 System 속성을 초기화 할 수 있습니다.

    정적 초기화에서 System 속성을 초기화 할 수 있습니다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:whereever/context.xml")
    public class TestWarSpringContext {
    
        static {
            System.setProperty("myproperty", "foo");
        }
    
    }
    

    정적 이니셜 라이저 코드는 스프링 응용 프로그램 컨텍스트가 초기화되기 전에 실행됩니다.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.모든 테스트에 대해 변수를 유효하게하려면 테스트 자원 디렉토리 (기본적으로 src / test / resources)에 application.properties 파일을 만들 수 있습니다.이 파일은 다음과 같습니다.

    모든 테스트에 대해 변수를 유효하게하려면 테스트 자원 디렉토리 (기본적으로 src / test / resources)에 application.properties 파일을 만들 수 있습니다.이 파일은 다음과 같습니다.

    MYPROPERTY=foo
    

    @TestPropertySource 나 비슷한 메소드를 통해 정의하지 않는 한,이 메소드는로드되고 사용된다. 속성이로드되는 순서는 Spring documentation chapter 24에서 찾을 수있다. Externalized Configuration.

  6. from https://stackoverflow.com/questions/11306951/how-to-set-environment-variable-or-system-property-in-spring-tests by cc-by-sa and MIT license