[英]Testing a rest service with JUnit
我以前寫過另一個問題 。 在REST服務上執行JUnit測試時出現錯誤,因為JSON只是Jersey的String。
public class MachineResponseTest {
private static final String BASE_URI = "http://localhost:8080/dni-fe/home"
@Test
public void testDevice() {
WebResource resource = Client.create().resource(BASE_URI);
resource.accept(MediaType.APPLICATION_JSON);
StringBuilder sb = new StringBuilder();
sb.append("{\"name\":\"123456\",\n");
sb.append(" \"country\":\"Spain\",\n");
sb.append(" \"company\":\"xxx\",\n");
sb.append(" \"model\":\"1.10.0\"\n}");
MachineResponse result = resource.post(MachineResponse.class,sb.toString());
}
然后,我嘗試將StringBuilder轉換為org.codehaus.jettison.json.JSONObject
對象,並返回一個由POJO插入的String。 這樣,先前的錯誤消失了:
try{
StringBuilder sb = new StringBuilder();
sb.append("{\"name\":\"123456\",\n");
sb.append(" \"country\":\"Spain\",\n");
sb.append(" \"company\":\"xxx\",\n");
sb.append(" \"model\":\"1.10.0\"\n}");
JSONObject jsonObj = new JSONObject(sb.toString());
}
catch(JSONException e){
....
}
String result = resource.post(String.class,jsonObj);
例如,假設我有這個POJO類:
public class ItemBean implements Serializable {
private static final long serialVersionUID = 7438046484680798158L;
private String name;
private String country;
private String company;
private String model;
public ItemBean() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
我嘗試使用此POJO來構建測試,例如:
ItemBean item = new ItemBean();
item.setName("123456");
item.setCountry("Spain");
item.setCompany("xxxx");
item.setModel("1.10.0");
String result = resource.post(String.class,item);
但是測試以錯誤結束:
com.sun.jersey.api.client.ClientHandlerException:com.sun.jersey.api.client.ClientHandlerException:Java類型的消息正文編寫器,類為it.dni.rest.models.DeviceBean,MIME媒體類型為application /在com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:151)上找不到八位字節流
因此,我的目標是直接在JSON中映射對象,反之亦然,但是Jersey並沒有為我做這件事。 如何在Junit測試中使用Jersey啟用此映射?
很少有真正有助於單元測試REST Web服務的庫。 保證放心: https : //github.com/rest-assured/rest-assured是一個,Unirest http://unirest.io/是另一個。 我剛開始使用Unirest,它對於JSON來說非常容易使用。 可能值得一看。
嘗試Jersey測試進行測試
Jersey Test Framework最初是一種內部工具,用於驗證服務器端組件的正確實現。 使用“現代”方法(如測試驅動的開發)來測試RESTful應用程序成為一個更加緊迫的問題,用戶開始尋找一種工具,該工具可以幫助盡快設計和運行測試,但提供了許多與測試執行環境相關的選項。 Jersey Test Framework的當前實現支持以下功能集:預配置的客戶端,以訪問對多個容器的已部署應用程序支持-灰熊,內存中,jdk,簡單,碼頭能夠針對任何外部容器自動配置的流量日志記錄而運行框架主要基於JUnit,但是您也可以使用TestNG運行測試。 它幾乎可以直接使用,並且可以很容易地將其集成到基於Maven的項目中。 盡管它可以在可以運行JUnit的所有環境中使用,但我們主要支持基於Maven的設置。
請參閱https://jersey.java.net/documentation/latest/test-framework.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.