2016-07-28 2 views
5

브라우저에서 호출되는 REST 끝점 (JAX-RS)이 있습니다. 우리는 브라우저에 결과를 표시 할 수 있도록 OutputStream을 지나가고 있습니다.이 람다 표현식을 어떻게 단위 테스트합니까?

다음은이 방법입니다. userHelper.findUseruserHelper.updateUser이를 호출 한 경우 Junit와 및 Mockito를 사용

@Path("/mypath/{userId}") 
@POST 
public Response createUser(@PathParam("userId") final int userId) { 
    StreamingOutput stream = (outputStream) -> { 
     User user = userHelper.findUser(userId); 
     userHelper.updateUser(user,outputStream); 
    }; 

    return Response.ok(stream).build(); 
} 

는, 우리가 어떻게 확인합니까?

기본적으로 상호 작용을 확인하기 만하면됩니다.

+1

userHelper의 모의서를 삽입해야합니다. 이미 TestCase를 만들었습니까? – Fildor

+0

예. 그건 작동하지 않습니다. 상호 작용은 람다식이 기 때문에 발생하지 않습니다. – vinoth

+1

테스트에서 상호 작용을 유발하고 모의를 검증해야합니다. –

답변

0

StreamingOutput은 다른 쪽 끝 (일반적으로 브라우저)의 누군가가 그 곳에서 당길 때만 호출됩니다. 테스트 사례는 인계해야하고 의견에 의해 제안 된대로 응답과의 상호 작용을 시작해야합니다.

2

"단위 테스트"하려면 테스트 클래스를 만들고이 메서드가 테스트 클래스에 속한 클래스의 새 인스턴스를 만들어야합니다. userHelper는 람다에 정의되어 있지 않으므로 클래스 멤버입니까?

  • 는 테스트 클래스에 Mockito
  • inject 모의와 mock userhelper 객체를 생성 :이 조롱 할 수 있도록합니다.
  • createUser 메소드를 호출하십시오.
  • verify은 mock에서 updateUser 메소드를 호출하는 것을 한 번 호출합니다.
  • 추가 단계로 가서 captors을 사용하여 전달되는 사용자 및 출력 스트림 객체를 확인할 수 있습니다.
관련 문제