我使用RESTeasy使用mkyong的示例创建了一个文档上传端点:http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-resteasy/
@POST
@Path("/upload")
@Consumes({MediaType.MULTIPART_FORM_DATA})
public Response uploadFile(MultipartFormDataInput input) {
List<InputPart> inputParts = MultipartHtmlUtils.getInputParts(input);
for (InputPart inputPart : inputParts) {
try {
String fileName = getFileName(inputPart);
byte[] bytes = extractFile(inputPart);
saveFile(bytes,fileName);
} catch (DocumentUploadException e) {
e.printStackTrace();
return Response.status(Response.Status.BAD_REQUEST).build();
}
}
return Response.ok().build();
}
我已经注入了一个客户端,它将处理保存文档,以便在测试中模拟注入的客户端。
private void saveFile(byte[] content, String filename) {
documentUploadClient.saveDocument(content, filename, uan);
}
我正在努力为此编写测试,因为似乎无法创建MultipartFormDataInput对象或InputPart对象。
我如何测试它或重构它以便更容易进行单元测试?
编辑:
我构建了一个多部分HTTP实体,但无法将其转换为MultipartFormDataInput,这是测试其余简单函数所必需的:
private HttpEntity buildMultipartData() {
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setContentType(ContentType.MULTIPART_FORM_DATA);
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("testFile");
builder.addBinaryBody("file", inputStream, ContentType.APPLICATION_OCTET_STREAM, "testFile" );
return builder.build();
}
答案 0 :(得分:0)
这是IMO的集成测试。如果您打算编写更多HTTP测试,我建议您评估Karate。
以下是多部分/文件上传示例:https://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/upload/upload-image.feature