我正在嘗試爲採用多部分表單數據作爲輸入的Play 2控制器創建功能測試。目前FakeRequest中沒有方法支持多部分表單POST。測試此控制器的其他方法有哪些?在Play 2.0中測試MultipartFormData FakeRequest
Map<String, Object> map = new HashMap<String, Object>();
map.put("param1", "test-1");
map.put("param2", "test-2");
map.put("file", file)
Result result = routeAndCall(fakeRequest(POST, "/register").withFormUrlEncodedBody(map));// NO SUCH METHOD
編輯: 這是我做測試multipart的解決方法。
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:3333/blobupload");
FileBody imageFile = new FileBody(new File("test/resources/test-1.jpg"));
StringBody guid1 = null;
StringBody guid2 = null;
try {
guid1 = new StringBody("GUID-1");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("key1", imageFile);
reqEntity.addPart("key2", guid1);
httppost.setEntity(reqEntity);
HttpResponse response;
try {
response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
爲什麼callAction需要withFormUrlEncodeBody? routeAndCall也應該工作。 routeAndCall(fakeRequest(POST,「/route").withFormUrlEncodedBody(map)); – angelokh
Mutlipartformdata可能適用於scala和你的方法。但是,對於Java,withFormUrlEncodedBody不允許在Object類型中使用值的映射。 – angelokh
我不知道爲什麼callAction需要Java風格,但似乎只能用callAction調用fakeRequest()。withFormUrlEncodeBody,無論如何,我對Java語言瞭解不多,所以我可能完全錯誤。我不認爲你需要使用withFormUrlEncodedBody來測試你的多部分,你應該只建立正確的POST請求。 – DamnWidget