Quarkus上传功能测试相关咨询
Quarkus MultipartFormDataInput上传端点测试指南
基础测试示例(REST Assured + Quarkus测试框架)
Quarkus官方推荐用REST Assured配合其测试扩展编写这类测试,以下是完整的单文件上传测试示例:
假设你的端点代码如下:
@POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile(MultipartFormDataInput input) { Map<String, List<InputPart>> formData = input.getFormDataMap(); InputPart filePart = formData.get("file").get(0); // 业务处理逻辑 return Response.ok("Uploaded").build(); }
对应的测试代码:
import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import java.io.File; @QuarkusTest public class UploadEndpointTest { @Test public void testSingleFileUpload() { File testFile = new File("src/test/resources/test-file.txt"); RestAssured.given() .multiPart("file", testFile) .when() .post("/upload") .then() .statusCode(200) .body(equals("Uploaded")); } }
关键测试要点
- 验证文件内容完整性:测试时可读取上传后存储的文件,对比原文件内容是否一致,确保上传逻辑无数据丢失
- 多文件上传测试:通过多次调用
multiPart方法模拟多文件提交:RestAssured.given() .multiPart("file", new File("file1.txt")) .multiPart("file", new File("file2.txt")) .when() .post("/upload-multiple") .then() .statusCode(200); - 校验表单参数:若端点同时接收普通表单字段,测试时可一并传入:
RestAssured.given() .multiPart("file", testFile) .multiPart("description", "Test upload file") .when() .post("/upload-with-meta") .then() .statusCode(200); - 错误场景测试:模拟上传空文件、超大小限制文件、不支持的文件类型,验证端点返回正确的错误状态码和提示信息
进阶技巧
- 单元测试模拟MultipartFormDataInput:无需启动容器时,可手动构建模拟实例测试核心逻辑:
@Test void testUploadLogicUnit() { MultipartFormDataInput mockInput = new MockMultipartFormDataInput(); InputPart mockFilePart = new MockInputPart("file", "test-file.txt", "text/plain", "test content".getBytes()); mockInput.addFormData("file", List.of(mockFilePart)); UploadService service = new UploadService(); Response response = service.uploadFile(mockInput); assertEquals(200, response.getStatus()); } - 配置覆盖测试:通过
@TestProfile或系统属性覆盖上传相关配置(如文件大小限制),验证配置生效逻辑
内容的提问来源于stack exchange,提问作者Стилиян Георгиев
相关产品推荐
相关产品推荐

