java - RESTEasy 有客户端模拟框架吗?

标签 java unit-testing jax-rs resteasy

RESTEasy 提供了 Server-side Mock Framework用于模拟服务器请求。是否有等效的单元测试 client framework

InMemoryClientExecutor是为了这个目的吗?我找不到有关如何使用此类的文档和示例。

最佳答案

看起来 InMemoryClientExecutor 可用于客户端模拟。在 source 中寻找, 它在内部使用与服务器端模拟框架相同的类,即 MockHttpRequestMockHttpResponse

InMemoryClientExecutor 使您能够重写 createResponse 以模拟响应,并且如果您想自定义,还有一个采用 Dispatcher 的构造函数并以这种方式拦截调用。

这是一个利用 client framework 的快速而肮脏的片段例如,

import javax.ws.rs.*;
import javax.ws.rs.core.Response.*;

import org.jboss.resteasy.client.*;
import org.jboss.resteasy.client.core.*;
import org.jboss.resteasy.client.core.executors.*;
import org.jboss.resteasy.mock.*;
import org.jboss.resteasy.plugins.providers.*;
import org.jboss.resteasy.spi.*;

public class InMemoryClientExecutorExample {
    public interface SimpleClient {
       @GET
       @Path("basic")
       @Produces("text/plain")
       String getBasic();

       @PUT
       @Path("basic")
       @Consumes("text/plain")
       void putBasic(String body);

       @GET
       @Path("queryParam")
       @Produces("text/plain")
       String getQueryParam(@QueryParam("param")String param);

       @GET
       @Path("matrixParam")
       @Produces("text/plain")
       String getMatrixParam(@MatrixParam("param")String param);

       @GET
       @Path("uriParam/{param}")
       @Produces("text/plain")
       int getUriParam(@PathParam("param")int param);
    }  

    public static void main(String[] args) {
        RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

        ClientExecutor executor = new InMemoryClientExecutor() {
            @Override
            protected BaseClientResponse<?> createResponse(ClientRequest request, MockHttpResponse mockResponse) {
                try {                    
                    System.out.println("Client requesting " + request.getHttpMethod() + " on " + request.getUri());
                }
                catch(Exception ex) {
                    ex.printStackTrace();
                }
                mockResponse.setStatus(Status.OK.getStatusCode());
                return super.createResponse(request, mockResponse);
            }
        };

        SimpleClient client = ProxyFactory.create(SimpleClient.class, "http://localhost:8081", executor);
        client.putBasic("hello world");
    }
}

关于java - RESTEasy 有客户端模拟框架吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631692/

相关文章:

java - 如何解析原始cookie

scala - 如何在 play 2.5 中测试使用自定义解析器的 Controller 方法?

database - 如何编写与数据库无关的函数以使其更易于单元测试

java - 防止 Restful 中的 xml 转义 (JAXRS)

java - 密码学 : AES/CTR Decryption

java - 如何更改一个数组中另一个数组的值?

iOS - 如何对深层链接进行单元测试以确保它们可以在应用程序端进行处理

java - 如何将对象从 ContainerRequestFilter 传递到资源

java - 当我从 html 表单传递值时,为什么我在 post api 期间收到 'Column cannot be null' 错误

java - 将 2D 数组条目初始化为 0 时出现 ArrayIndexOutOfBoundsException