[SPRING] jUnit 테스트에서 Spring @Service 객체에 액세스하는 방법
SPRINGjUnit 테스트에서 Spring @Service 객체에 액세스하는 방법
상황 : @Service를 사용하여 속성 구현 파일에 액세스 할 수있는 서비스 구현 클래스가 있습니다.
@Service("myService")
public class MySystemServiceImpl implements SystemService{
@Resource
private Properties appProperties;
}
속성 개체는 config-file을 통해 구성됩니다. applicationContext.xml
<util:properties id="appProperties" location="classpath:application.properties"/>
이 구현의 몇 가지 방법을 테스트하고 싶습니다.
질문 : 속성 appProperties가 제대로 초기화되는 방식으로 테스트 클래스에서 MySystemServiceImpl-object에 액세스하는 방법?
public class MySystemServiceImplTest {
//HOW TO INITIALIZE PROPERLY THROUGH SPRING?
MySystemServiceImpl testSubject;
@Test
public void methodToTest(){
Assert.assertNotNull(testSubject.methodToTest());
}
}
appProperties를 사용하는 메서드가 NullPointerException을 throw하는 것보다 새로운 MySystemServiceImpl을 간단하게 만들 수는 없습니다. 그리고 개체에 속성을 직접 삽입 할 수는 없습니다. 적절한 설정 메서드가 없습니다.
바로 여기에 올바른 단계를 넣으십시오 (답은 @NimChimpsky 덕분입니다).
해결법
-
==============================
1.또는 통합 테스트를 수행하기 위해이 작업을 수행합니다.
또는 통합 테스트를 수행하기 위해이 작업을 수행합니다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"/applicationContext-test.xml"}) @Transactional public class MyTest { @Resource(name="myService") public IMyService myService;
그런 다음 평상시처럼 서비스를 사용하십시오. 테스트 / 리소스 디렉토리에 앱 컨텍스트 추가
-
==============================
2.생성자를 사용하십시오.
생성자를 사용하십시오.
MySystemServiceImpl testSubject = new MySystemServiceImpl();
이것은 단위 테스트입니다. 단위 테스트는 클래스를 다른 클래스 및 인프라와 분리하여 테스트합니다.
클래스가 다른 인터페이스와의 종속성을 가지고 있다면 인터페이스를 조롱하고 이러한 모의 객체를 인수로 사용하여 객체를 생성하십시오. 그것이 종속성 주입의 핵심입니다. 객체를 쉽게 테스트 할 수 있도록 객체 내부에 다른 모의 구현체를 삽입 할 수 있습니다.
편집하다:
각 단위 테스트에 대해 원하는 속성을 주입 할 수 있도록 속성 객체에 대한 설정자를 제공해야합니다. 주입 된 속성에는 테스트하려는 항목에 따라 공칭 값, 극한값 또는 잘못된 값이 포함될 수 있습니다. 필드 주입은 실용적이지만 단위 테스트와 잘 맞지 않습니다. 의존성 주입의 주요 목적이 단위 테스트에서 모의 또는 특정 종속성을 정확하게 주입 할 수 있기 때문에 단위 테스트를 사용할 때 생성자 또는 설정자 주입을 선호해야합니다.
from https://stackoverflow.com/questions/7723951/how-to-access-spring-service-object-from-junit-test by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 AOP + Aspectj를 통한 예외 처리 (0) | 2019.07.16 |
---|---|
[SPRING] 봄 부팅, 최대 절전 모드 검색 속성 (0) | 2019.07.16 |
[SPRING] 하나의 트랜잭션에서 Hibernate와 JDBC (0) | 2019.07.16 |
[SPRING] DefaultAnnotationHandlerMapping의 작동 방식 (0) | 2019.07.16 |
[SPRING] junit 테스트를 사용하여 Spring Boot 애플리케이션에 명령 줄 인수 전달하기 (0) | 2019.07.16 |