如何使用 Multipart 特性进行资源测试

How to make resource test with Multipart feature

我创建了我的资源来处理一些图像,我想像以前一样使用 JUnit @ClassRule 测试它们。它们看起来像这样:

@Path("/myImage")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response postImage(
       @FormDataParam("file") InputStream inputStream) {
//doStuff
}

现在,我想测试一下,但遇到了问题。我争取这个 class 规则可以

@ClassRule
public static final ResourceTestRule resources = ResourceTestRule.builder()
                .addResource(new MyResource())
                .addResource(new MultiPartBundle())
                .build();

但我仍然遇到错误

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.

[[FATAL] No injection source found for a parameter of type public ...

如何为这个问题编写正确的 class 规则?

错误是因为您没有向服务器注册MutliPartFeatureMultiPartBundle(注册 MultiPartFeature)不受 ResourceTestRule 支持。所以你只需要自己注册

public static final ResourceTestRule resources = ResourceTestRule.builder()
                .addResource(new MyResource())
                .addProvider(MultiPartFeature.class) 
                .build();

与客户端相同。如果您想在客户端使用多部分序列化,您还需要注册该功能

resource.client().register(MultiPartFeature.class)..

你可以看到一个完整的例子here