【问题标题】:How to unit test multipart/form-data file upload endpoint with RESTeasy如何使用 RESTeasy 对多部分/表单数据文件上传端点进行单元测试
【发布时间】:2018-01-31 12:54:41
【问题描述】:

我使用 mkyong 的示例使用 RESTeasy 创建了一个文档上传端点: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 对象。

如何测试或重构它以使其更容易进行单元测试?

编辑:

我已经构建了一个多部分 HTTPentity,但无法将其转换为 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();
}

【问题讨论】:

    标签: java unit-testing multipartform-data resteasy


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多