1

如果我需要像下面那样模拟 RESTful 资源类和门面方法,门面将不会被模拟。

例如,

@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) 资源类中的外观方法调用?有没有可能我可以在其中模拟资源类和方法调用。

4

1 回答 1

1

Mockito 无法存根静态方法。为此,您需要使用 PowerMock。

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

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

于 2014-10-02T16:15:45.237 回答