2014-10-02 82 views
0

如果我需要模擬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

回答

1

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