我需要在一個非空的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方法)
也許嘗試:http://jersey.java.net/nonav/documentation/latest/test-framework.html –