java - 使用 PATCH 和 Jersey Client API 进行单元测试

标签 java rest jax-rs jersey-2.0 http-patch

我正在使用 Jersey 实现 REST API。对于 PATCH(部分更新),我实现了自己的 PATCH 自定义实现,因为 Jersey 不支持它。

现在我正试图弄清楚如何围绕该实现编写功能测试。我正在将 Jersey 测试框架用于具有该支持的其他方法(PUTPOSTGETDELETE)在该框架中可用。

有没有一种方法可以扩展 Jersey 测试框架实现来为 PATCH 编写我的功能测试? 如果没有,是否有任何其他可用的测试框架可用于测试我的 Jersey PATCH 实现?

如果有人能提供任何示例,那就太好了。

最佳答案

假设您的实现包含这样的自定义注释

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.ws.rs.HttpMethod;

@HttpMethod("PATCH")
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PATCH {}

尝试用 Client 做这样的事情

 String response = target.request().method("PATCH", Entity.text("Hello"), String.class);

默认是不支持的,会抛出异常

java.net.ProtocolException: Invalid HTTP method: PATCH

这不是直接与 Client API 相关的问题,而是与较低级别的 Java API 相关的问题。似乎是一些安全限制。

使用客户端 API,我们可以通过设置属性来覆盖它

JerseyTest 中,配置 Client 的一种方法是覆盖 configureClient,并使用 ClientConfig< 设置属性。您可以轻松地在 Client 本身上设置属性,但要保持 JerseyTest 框架的精神(我们不需要显式访问 客户端,下面的例子只是覆盖方法

public class PatchTest extends JerseyTest {

    @Path("patch")
    public static class PatchResource {
        @PATCH
        @Produces(MediaType.TEXT_PLAIN)
        public String getPatch(String request) {
            return "Patched " + request;
        }
    }

    @Override
    protected void configureClient(final ClientConfig config) {
        config.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
    }

    @Override
    public Application configure() {
        return new ResourceConfig(PatchResource.class);
    }

    @Test
    public void doPatchTest() {
        WebTarget target = target("patch");
        String response = target.request().method("PATCH", Entity.text("Hello"), String.class);
        Assert.assertEquals("Patched Hello", response);
        System.out.println(response);
    }
}

关于java - 使用 PATCH 和 Jersey Client API 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499106/

相关文章:

java - XmlJavaTypeAdapter 并阐明?

java - 为什么我需要在应用程序中显式声明 REST 资源?

java - JList(与数组列表链接)添加元素导致内存不足或消失

Java 对象图验证

api - RESTful API : how to securely store bearer API tokens?

osgi - 将 Swagger 2.0 与 Glassfish 4.1 OSGi REST 项目集成

java - 这个四元数旋转代码是如何工作的?

java - 在不同端口的同一个 tomcat 上部署 Angular 5 和 spring boot 应用程序

c - Arduino 从服务器问题中得到响应

java - 是否使用 Jersey 版本 1.x 或 2.0