복붙노트

[SPRING] Spring jUnit 테스트 등록 정보 파일

SPRING

Spring jUnit 테스트 등록 정보 파일

자체 속성 파일 (application-test.properties) 및 해당 스프링 구성 파일 (application-core-test.xml)이있는 jUnit 테스트가 있습니다.

이 방법 중 하나는 스프링 구성에 의해 인스턴스화 된 오브젝트를 사용하며 이는 스프링 구성 요소입니다. 클래스의 멤버 중 하나는 기본 속성 파일 인 application.properties에서 값을 가져옵니다. jUnit을 통해이 값에 액세스하는 동안 항상 null입니다. 심지어 실제 속성 파일을 가리 키도록 속성 파일을 변경해 보았지만 작동하지 않는 것 같습니다.

다음은 속성 파일 객체에 액세스하는 방법입니다.

@Component
@PropertySource("classpath:application.properties")
public abstract class A {

    @Value("${test.value}")
    public String value;

    public A(){
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    }

    public A(String text) {
        this();
        // do something with text and value.. here is where I run into NPE
    }

}

public class B extends A { 
     //addtnl code

    private B() {

    }


    private B(String text) {
         super(text)
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:META-INF/spring/application-core-test.xml",
                             "classpath:META-INF/spring/application-schedule-test.xml"})
@PropertySource("classpath:application-test.properties")
public class TestD {

    @Value("${value.works}")
    public String valueWorks;

    @Test
    public void testBlah() {     
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        B b= new B("blah");
        //...addtnl code

    }    
}      

해결법

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

    1.첫째, @PropertySource의 application.properties는 application-test.properties를 읽어야합니다.

    첫째, @PropertySource의 application.properties는 application-test.properties를 읽어야합니다.

    @PropertySource("classpath:application-test.properties ")
    

    이 파일은 / src / test / resources 클래스 경로 (루트에 있음) 아래에 있어야합니다.

    application-test.properties라는 파일에 하드 코딩 된 종속성을 지정하는 이유가 무엇인지 이해할 수 없습니다. 이 구성 요소는 테스트 환경에서만 사용됩니까?

    정상적인 일은 다른 클래스 경로에 같은 이름의 속성 파일을 갖는 것입니다. 테스트 실행 여부에 따라 둘 중 하나를로드합니다.

    일반적으로 배치 된 응용 프로그램에서 다음을 수행 할 수 있습니다.

    src/test/resources/application.properties
    

    src/main/resources/application.properties
    

    그리고 다음과 같이 주사하십시오.

    @PropertySource("classpath:application.properties")
    

    더 좋은 일은 Spring 문맥에서 bean으로서 그 프라퍼티 파일을 드러내고 그 bean을 필요로하는 모든 컴포넌트에 삽입하는 것이다. 이렇게하면 코드가 application.properties에 대한 참조로 흩어지지 않고 원하는 모든 것을 속성의 소스로 사용할 수 있습니다. 다음은 예제입니다 : 봄 프로젝트에서 속성 파일을 읽는 방법?

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

    2.테스트에 관해서는 다른 곳에서 정의 된 속성을 덮어 쓸 Spring 4.1을 사용해야합니다.

    테스트에 관해서는 다른 곳에서 정의 된 속성을 덮어 쓸 Spring 4.1을 사용해야합니다.

    @TestPropertySource("classpath:application-test.properties")
    

    테스트 속성 소스는 운영 체제 환경이나 Java 시스템 속성에서로드 한 것보다 우선 순위가 높으며 @PropertySource와 같은 응용 프로그램에서 추가 한 속성 소스도 있습니다.

  3. from https://stackoverflow.com/questions/32974432/spring-junit-testing-properties-file by cc-by-sa and MIT license