8

RESTEasy は、サーバー リクエストをモックするためのサーバー側モック フレームワークを提供します。クライアントフレームワークの単体テストに相当するものはありますか?

InMemoryClientExecutorはこの目的のために意図されていますか? このクラスの使用方法に関するドキュメントと例を見つけるのに苦労しています。

4

1 に答える 1

8

InMemoryClientExecutorクライアント側のモックに使用できるようです。sourceを見ると、サーバー側のモック フレームワークと同じクラス、つまり と が内部的に使用されていMockHttpRequestますMockHttpResponse

InMemoryClientExecutor応答をモックするためにオーバーライドする機能を提供し、そのように呼び出しをカスタマイズして傍受したい場合createResponseは、 を取るコンストラクターもあります。Dispatcher

これは、クライアント フレームワークの例を利用した手短なスニペットです。

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");
    }
}
于 2012-11-29T18:55:27.023 に答える