2017-10-20 1 views
1

작성한 스프링 서비스 응용 프로그램에 대한 JUnit 테스트 사례를 작성하려고합니다. 필자는 애플리케이션 테스트를 마친 후 단위 테스트 모음을 작성하려고합니다.자동 부팅 구성 요소가있는 Spring Boot Service 응용 프로그램에 대한 JUnit 테스트 사례 작성

서비스 계층을 테스트하는 것으로 시작합니다. 내 DAO 객체를 포함하여 @ @AutoWired 구성 요소에 문제가 있습니다. Spring 애플리케이션 자체를 실행할 때 모든 것이 잘 동작한다. 그러나 JUnit 테스트를 실행할 때 autowire가 아니며 Null이 남아 있으므로 NPE가 발생합니다.

서비스 파일 : 여기에 내가 함께 일하고 무엇 골격이

@Component 
public class WebServiceImpl implements WebService{ 

@Autowired 
WebDAO webDAO; 

@Override 
public List<String> getItems(){ 
    List<String> items = webDAO.getItems(); 
    /* 
    * some filtering/actions done here 
    */ 
    return items; 
    } 
} 

테스트 파일 :

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class ServiceTests{ 
    private WebService service; 

    @Before 
    public void setup(){ 
     this.service = new WebServiceImpl(); 
    } 

    @Test 
    public void getItemsTest(){ 
     List<String> items = this.service.getItems(); 
     assertNotNull(items); 
    } 
} 

내가 webDAO에서 NPE를 얻을이 테스트를 실행. 그것은 일반적으로 봄 부팅 시동에서처럼 autowired를 얻지 못합니다. 나는 봄을 일하는 것에 익숙하지 않으므로 계속 진행하는 것이 가장 좋은 방법인지 확신 할 수 없다. 나는 그것이 정상적으로 될 것이므로 애플리케이션을 시작하지 않기 때문에 autowired를 얻지 못하고 있다고 가정하지만 클래스를 직접 인스턴스화하고있다.

유일하게 가능한 생각은 테스트 목적으로 여기 dao에 대한 getter/setter를 만드는 것입니다. 그러나 모든 원치 않는 결과가있을 경우 사용되는 모든 자동 필드 및 Idk에 대해이를 수행해야합니다.

답변

2

테스트중인 구성 요소를 테스트에 자동으로 전송합니다.

스프링 컨테이너 외부에서 구성 요소를 작성하므로 해당 구성 요소에 대해 알지 못합니다.

private WebService service; 

    @Before 
    public void setup(){ 
     this.service = new WebServiceImpl(); 
    } 

@Autowired 
private WebService service; 
+0

아, 신인 실수가 될 것이다. 대답 할 시간을 내 주셔서 감사합니다! – Aweava