복붙노트

[SPRING] jUnit 테스트에서 Spring @Service 객체에 액세스하는 방법

SPRING

jUnit 테스트에서 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. ==============================

    1.또는 통합 테스트를 수행하기 위해이 작업을 수행합니다.

    또는 통합 테스트를 수행하기 위해이 작업을 수행합니다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"/applicationContext-test.xml"})
    @Transactional
    public class MyTest {
    
        @Resource(name="myService")
        public IMyService myService;
    

    그런 다음 평상시처럼 서비스를 사용하십시오. 테스트 / 리소스 디렉토리에 앱 컨텍스트 추가

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

    2.생성자를 사용하십시오.

    생성자를 사용하십시오.

    MySystemServiceImpl testSubject = new MySystemServiceImpl();
    

    이것은 단위 테스트입니다. 단위 테스트는 클래스를 다른 클래스 및 인프라와 분리하여 테스트합니다.

    클래스가 다른 인터페이스와의 종속성을 가지고 있다면 인터페이스를 조롱하고 이러한 모의 객체를 인수로 사용하여 객체를 생성하십시오. 그것이 종속성 주입의 핵심입니다. 객체를 쉽게 테스트 할 수 있도록 객체 내부에 다른 모의 구현체를 삽입 할 수 있습니다.

    편집하다:

    각 단위 테스트에 대해 원하는 속성을 주입 할 수 있도록 속성 객체에 대한 설정자를 제공해야합니다. 주입 된 속성에는 테스트하려는 항목에 따라 공칭 값, 극한값 또는 잘못된 값이 포함될 수 있습니다. 필드 주입은 실용적이지만 단위 테스트와 잘 맞지 않습니다. 의존성 주입의 주요 목적이 단위 테스트에서 모의 ​​또는 특정 종속성을 정확하게 주입 할 수 있기 때문에 단위 테스트를 사용할 때 생성자 또는 설정자 주입을 선호해야합니다.

  3. from https://stackoverflow.com/questions/7723951/how-to-access-spring-service-object-from-junit-test by cc-by-sa and MIT license