Estoy tratando de crear una prueba de función para un controlador Play 2 que toma datos de formulario multiparte como entrada. No hay ningún método actualmente en FakeRequest para admitir el formulario POST de varias partes. ¿Qué otras formas de probar este controlador?Prueba MultipartFormData en Play 2.0 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
EDIT: Esta es la solución que hice para probar varias partes.
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();
}
Por qué se requiere para callAction withFormUrlEncodeBody? routeAndCall también debería funcionar. routeAndCall (fakeRequest (POST, "/route").withFormUrlEncodedBody(map)); – angelokh
Datos de Mutlipartform podría funcionar para Scala con usted método. Sin embargo, para java, withFormUrlEncodedBody no permitiría un mapa con valor en Tipo de objeto. – angelokh
No sé por qué se requiere callAction en el sabor de Java, pero parece que solo se puede llamar a fakeRequest() .withFormUrlEncodeBody con callAction, de todos modos, no sé mucho sobre el lenguaje Java, así que puedo estar completamente equivocado. No creo que deba usar withFormUrlEncodedBody para probar su multiparte, solo debería compilar la solicitud POST correcta. – DamnWidget