2012-11-19 33 views
0

我需要在一個非空的HttpServletRequest某種方式或控制HelperClass.getUser(請求)來傳遞(的方法確實request.getHeader()內並作爲該請求爲空它將引發錯誤並且未通過測試)。單元測試的java REST API與請求頭,舊代碼

我們想單元測試我們的REST API,所以我們很快就知道,如果一個變化(或開發商)打破它,或者如果我們有一個bug等最終開始做TDD/BDD。這些測試最終將用於螞蟻的自動構建。我可以調用REST API並設置來自java的頭文件,但不認爲這將是一個單元測試?將取決於在本地主機上運行它?可能是錯了

代碼:使用JUnit/

的Mockito
@Path("service/") 
public class Service { 
static DataAccess da = null; 
@javax.ws.rs.core.Context HttpServletRequest request; 

//constructor where doa will be mock object 
public Service(DataAccess dao){ 
da = dao; 
} 

@GET 
@Path("custom-object/{date}/{batch}") 
@Produces({"application/xml", "application/json", "application/x-protobuf"}) 

//Method to test 
public CustomObject getCustomObject(
@PathParam("date") String date, 
@PathParam("batch") int batch, 
@QueryParam("type") String type) { 
String user = HelperClass.getUser(request); // this is causing me issues 
//da will be a mock object 
CustomObject returnedVal = da(user,DatatypeConverter.parseDateTime(date).getTime(), batch, artifactType); 
return returnedVal; 
} 
} 

測試(樂於使用powermock作爲一個解決方案):

@Test  
public void testGetCustomObject() { 
    System.out.println("getCustomObject"); 

    //Arrange 
    DataAccess da = mock(DataAccess.class); 
    Service instance = new Service(da); 
    String date = "2010-04-05T17:16:00Z"; 
    int batch = 0; 
    String type = ""; 

    CustomObject expResult = null; 
    //Act 
    CustomObject result = instance.getCustomObject(date, batch, type); 
    //Assert 
    assertEquals(expResult, result); 
} 

測試通過,如果我硬編碼String user="123";。在編寫有用的測試之前,我需要解決這個問題。誰能給示例代碼來嘲笑/控制這行代碼,有效地設置user作爲一個非空的字符串(這條線String user = HelperClass.getUser(request);是每個API方法)

+0

也許嘗試:http://jersey.java.net/nonav/documentation/latest/test-framework.html –

回答

0

對於構建HttpServletRequest的,你可以使用一些模擬對象像春天的MockHttpServletRequest。

或者你可以重構你的助手類,使的getUser()方法非靜態和使用到的Mockito嘲笑它在你的單元測試。

+0

不知道爲什麼我不只是傳遞它之前,我也可以使用'HttpServletRequest mockRequest =模擬(HttpServletRequest.class);'我一定是驚慌失措!謝謝你讓我回到正軌 – ono2012

2

你可以嘗試REST assured庫,幫助單元測試REST服務。

+0

我想我需要研究REST的更放心,它似乎對集成測試也比較多,但我已經看到了它正在與單元測試使用的提到。它看起來很有趣。 – ono2012