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)的资源类内的门面方法调用?有可能我可以嘲笑它里面的资源类和方法调用。
Mockito不能存根静态方法。你需要使用PowerMock。
但我的方法是尽量避免使用静态方法,以便代码可以通过普通的Mockito进行测试。
以下是详细解释了这两种方法: http://lkrnac.net/blog/2014/01/mock-static-method/
我在Facade类中没有任何静态方法(我在这里的TestFacade是一个EJB) – user3587174 2014-10-02 16:48:21
@ user3587174,这是非静态方法的调用?:''Stock stock = TestFacade.findStock(stockid);''' – luboskrnac 2014-10-03 15:55:13
我有其他一个EJB查找问题比看起来它的工作原理。不需要编写客户端请求和响应代码。我现在可以嘲笑资源类中的方法。 – user3587174 2014-10-02 23:59:06