2014-10-02 4 views
0

아래와 같이 RESTful 리소스 클래스와 facade 메서드를 조롱해야하는 경우 외관이 조롱되지 않습니다. 예컨대Mockito를 사용한 모의 RESTful (JAX-RS) 리소스 클래스

,

@Path("/v1/stocks") 
public class StockResource { 
@GET 
@Path("/{stockid}") 
@Produces({ MediaType.APPLICATION_JSON }) 
public Response getStock(@PathParam("stockid") String stockid) { 
    Stock stock = TestFacade.findStock(stockid); 
     if (!ObjectUtils.equals(stock, null)) { 
      return Response.status(Status.OK).entity(stock).build(); 
     } 
     return Response.status(Status.BAD_REQUEST).build(); 
} 
} 

@RunWith(MockitoJUnitRunner.class) 
public class StockTest{  
    RestClient restClient = new RestClient(); 

    @Mock 
    private TestFacade facade; 

    @Test 
    public void getStockReturnsStock(){ 

    // given 
    given(facade.findStock(stockid)) 
      .willReturn(new Stock()); 
    Resource resource = restClient.resource(url + "/1234");  

    // when 
    ClientResponse response = (ClientResponse) resource.accept(
      "application/json").get(); 

    // verify 
    assertEquals(200, response.getStatusCode());   
    verify(facade, Mockito.times(1)).findStock("stockid"); 
} 
} 

어떻게하여 RESTful (JAX-RS) 자원 클래스 내부 외관 메소드 호출을 모방? 거기에 리소스 클래스와 메서드 호출 두 모의 수 있습니다 가능성이.

+0

내가 다른 EJB 조회의 문제가 있었다. 요청 및 응답을위한 클라이언트 코드를 작성할 필요가 없습니다. 이제 리소스 클래스의 메서드를 조롱 할 수 있습니다. – user3587174

답변

1

Mockito는 정적 메서드를 스터핑 할 수 없습니다. 이를 위해서는 PowerMock을 사용해야합니다.

하지만 내 접근법은 가능한 한 정적 메서드를 피하는 것이므로 코드는 일반 Mockito로 테스트 할 수 있습니다.

여기에 자세히 설명되어 두 가지 접근 방식이다 : 그것은 작동 것보다 http://lkrnac.net/blog/2014/01/mock-static-method/

+0

Facade 클래스에 정적 메서드가 없습니다. TestFacade는 EJB입니다. – user3587174

+2

@ user3587174이 정적 메서드가 아닌 호출입니까? :''stockStay = TestFacade.findStock (stockid); " – luboskrnac