Mockito模拟RESTful(JAX-RS)资源类

Mockito模拟RESTful(JAX-RS)资源类

问题描述:

如果我需要模拟RESTful资源类和下面的facade方法,那么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 2014-10-02 23:59:06

Mockito不能存根静态方法。你需要使用PowerMock。

但我的方法是尽量避免使用静态方法,以便代码可以通过普通的Mockito进行测试。

以下是详细解释了这两种方法: http://lkrnac.net/blog/2014/01/mock-static-method/

+0

我在Facade类中没有任何静态方法(我在这里的TestFacade是一个EJB) – user3587174 2014-10-02 16:48:21

+2

@ user3587174,这是非静态方法的调用?:''Stock stock = TestFacade.findStock(stockid);''' – luboskrnac 2014-10-03 15:55:13