2009-08-03 10 views
0

RPC要求を処理するこのGWTコードは、状態(準備完了、待機中、エラーなど)を維持しています。 そして、各呼び出しの後にクラスがその状態を正しく変更するかどうか、レスポンス変数などを設定して確認したいと思います。Javaクラス内でのモック

実際にサーバーに要求を出さずにテストするにはどうすればいいですか?サーバー自体)。

私はリクエスト・コールバック・クラスを何らかの形で模倣できると思うが、テストでは見えない。

私は迷っています!

以下のコードのサンプル(誰かが望む場合には、後ですべてを投稿します)。

public class RPCHandler 
{ 


    public RPCHandler(String method,String[] argumentsName, 
    String[][] argumentsValues) 
    { 
    this.method = method; 
    this.argumentsName = argumentsName; 
    this.argumentsValues = argumentsValues; 
    } 



    /** 
    * Method that creates a RPC request using JSON in a POST 
    * 
    */ 
    public void rpcRequest(){ 
    if(currentState == HandlerState.WAITING_RESPONSE)return; 


    currentState = HandlerState.WAITING_RESPONSE; 

    // Append watch list stock symbols to query URL. 

    url = URL.encode(url); 
    url += "action="; 
    url += method; 

    // Send request to server and catch any errors. 
    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url); 

    String requestData = parseToJSON(argumentsName, argumentsValues); 

    try{ 

    Request request = builder.sendRequest(requestData, new RequestCallback() 
    { 
     public void onError(Request request, Throwable exception) 
     { 
     setRPCException(new Exception("Error while saving. Action="+method)); 
     setCurrentState(HandlerState.ON_ERROR); 
     } 
     //Few other error, response received hander methods after this point. 
    } 

} 

答えて

2

実際のトランスポートをモックアウトしているように見えるので、RequestBuilderクラスのモックを構築する必要があります。 JMockitでは、次のように書くことができます:

public class MockRequestBuilder 
{ 
    public void $init(int method, String url) 
    { 
    /* check values and/or store for later */ 
    } 

    public Request sendRequest(String data, RequestCallback callback) 
    { 
    /* check values and/or store for later */ 
    } 
} 

モックに何をしたいのかを詳しく記入する必要があります。

public class MyGWTClass 
{ 
    protected static class RpcCallback extends RequestCallback 
    { 
     public void onError(...) { ... } 
    } 
} 

をクラスにコールバックオブジェクトを移動し、ファクトリメソッドを使用することにより、あなたはそのテストを作成することができます。また、あなたはあなたの外側のクラスの内部という名前のクラスのインスタンスへのコールバックを移動した場合、コールバックのテストを分離することができますコールバックのみをチェックします。

+0

使用済み、仕事中、愛しています:D – Diones

関連する問題