2016-10-17 8 views
0

필드가 Spring bean으로 autowired되는 클래스를 유닛 테스트 할 작업이 주어졌습니다. process이라는 주 공용 메서드는 아무 것도 반환하지 않습니다. 다음은 클래스의 일부입니다.소유 클래스의 필드가 private이고 Spring @Autowired 인 void 반환 메소드의 단위 테스트 방법

public class AutoRejector{ 

    @Autowired 
    private MNPServicesWrapper mnpWrapper; 
    //some more autowired fields 

    public void process() { 
     List<RequestInfo> requests = mnpWrapper.getNewMnpRequests(); 
     ........ 
    } 
} 

MNPServicesWrapper는 인터페이스입니다. 테스트하는 동안 getNewMnpRequests 메서드가 호출 될 때 몇 가지 테스트 값을 반환하는 자체 테스트 구현을 제공하려고합니다.

이 필드를 생성자 또는 설정자를 통해 설정할 수 있다면 간단합니다. 하지만 @Autowired 필드는 어떻게 설정합니까?

+0

읽기 조롱에 대해 – Jens

답변

1

Mockito 및 PowerMock과 같은 조롱 프레임 워크를 사용할 수 있습니다. 테스트 클래스에 조롱 된 객체를 삽입하는 데 도움이됩니다. 그런 다음 메소드 반환을 지정할 수 있습니다. (반사를 사용하여 테스트 객체를 주입합니다. 반사를 사용하여 Mockito를 사용하지 않고 동일하게 수행 할 수 있습니다.) void 메소드의 경우 이러한 조롱 프레임 워크 중 하나를 사용하여 mnpWrapper.getNewMnpRequests()이 호출 된 횟수를 지정할 수 있습니다.

Mockito에 대해 더 자세히 읽고, JAR을 가져 와서 JAVA 프로젝트에서 사용하십시오.

Mockito에서 코드의 테스트 예제는 다음과 같습니다

@RunWith(MockitoJUnitRunner.class) 
    public class AutoRejectorTest { 
    @Mock 
    MNPServicesWrapper mnpWrapper; 

    @InjectMocks 
    AutoRejector autoRejector; 

    @Test 
    public void processTest(){ 
     autoRejector.process(); 
     //Assert that the getNewMnpRequests method was called exactly once 
     Mockito.verify(mnpWrapper,times(1)).getNewMnpRequests(); 
     } 
}