我有问题写的Rest保证测试POST
/uplod
endpoint。然后QUKUS应用程序运行此endpoint按预期工作,文件成功上传并保存到DB。但我不知道如何测试此endpoint。我尝试了几件事,但它们不起作用。
最新的异常之一是:请使用EncoderConfig(EncoderConfig#inkdeContentTypeAs)来指定如何序列化此内容类型的数据
。
也有异常:没有找到类java.io的序列化程序。FileDESptor和没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature。FAIL_ON_EMPTY_BEANS)
,但这一个用放心的配置修复了。
我无法更改DTO示例类字段类型。使用byte[]有效,使用InputStream无效。
DTO类:
@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Data
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class ExampleDto {
@FormParam("example")
@PartType(MediaType.APPLICATION_OCTET_STREAM)
private InputStream example;
@FormParam("example1")
@PartType(MediaType.TEXT_PLAIN)
@UUID
private String example1 ;
@Email
@FormParam("example2")
@PartType(MediaType.TEXT_PLAIN)
private String example2;
}
资源类发文方式:
@POST
@Path("/upload")
@Consumes(MULTIPART_FORM_DATA)
@Produces(APPLICATION_JSON)
public Response saveExample(@MultipartForm @Valid ExampleDto example) {
ExampleDto exampleDto = serviceExample.save(example);
return Response.accepted().entity(exampleDto).build();
}
Rest保证测试:
@SneakyThrows
@Test
void saveExample(){
String FILE = "src/test/resources/example.zip";
InputStream file = new FileInputStream(FILE);
ExampleDto example = new ExampleDto(file, "example1", "example2");
ExampleDto actual =
given()
.config(
RestAssured.config()
.encoderConfig(
encoderConfig()
.encodeContentTypeAs("multipart/form-data", ContentType.MULTIPART))
.objectMapperConfig(
new ObjectMapperConfig()
.jackson2ObjectMapperFactory(
(cls, charset) -> {
ObjectMapper om = new ObjectMapper();
om.configure(
SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
om.configure(
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return om;
})))
.body(example)
.when()
.accept(MediaType.MULTIPART_FORM_DATA)
.post("/upload")
.then()
.statusCode(Response.Status.ACCEPTED.getStatusCode())
.extract()
.as(ExampleDto.class);
}
提前感谢您的想法。
你可以这样试试:
private RequestSpecification baseRequest(){
return given()
.baseUri(BASE_URI)
.basePath(basePath)
.relaxedHTTPSValidation();}
baseRequest()
.contentType(ContentType.MULTIPART)
.formParams(formParams)
.multiPart("content", file)
.post(endpointURL);