如何使用RESTeasy对multipart / form-data文件上载端点进行单元测试

时间:2018-01-31 12:54:41

标签: java unit-testing multipartform-data resteasy

我使用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();
}

1 个答案:

答案 0 :(得分:0)

这是IMO的集成测试。如果您打算编写更多HTTP测试,我建议您评估Karate

以下是多部分/文件上传示例:https://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/upload/upload-image.feature