[SPRING] Spring jUnit 테스트 등록 정보 파일
SPRINGSpring 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.첫째, @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.테스트에 관해서는 다른 곳에서 정의 된 속성을 덮어 쓸 Spring 4.1을 사용해야합니다.
테스트에 관해서는 다른 곳에서 정의 된 속성을 덮어 쓸 Spring 4.1을 사용해야합니다.
@TestPropertySource("classpath:application-test.properties")
테스트 속성 소스는 운영 체제 환경이나 Java 시스템 속성에서로드 한 것보다 우선 순위가 높으며 @PropertySource와 같은 응용 프로그램에서 추가 한 속성 소스도 있습니다.
from https://stackoverflow.com/questions/32974432/spring-junit-testing-properties-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Jdbc 템플릿 autowiring 데이터 원본 문제로 스프링 부트 자동 구성 (0) | 2019.02.01 |
---|---|
[SPRING] 확인란 값이 false 일 때 객체에 바인딩되지 않습니까? (0) | 2019.02.01 |
[SPRING] Mybatis 봄 여러 데이터베이스 Java 구성 (0) | 2019.02.01 |
[SPRING] 스프링 구성 (0) | 2019.02.01 |
[SPRING] 프록시가 작동하지 않는 CGLIB 서비스의 자산 조롱 (0) | 2019.02.01 |