2009-08-03 23 views
0

So habe ich diesen GWT-Code, der RPC-Anforderungen verarbeitet, die Zustände (bereit, warten, Fehler usw.) verwalten. Und ich würde gerne überprüfen, ob die Klasse ihre Zustände nach jedem Aufruf korrekt ändert, Antwortvariablen setzen usw.Mocking innerhalb einer Java-Klasse

Nun, wie sollte ich fortfahren, das zu testen, ohne tatsächliche Anfragen an den Server (die in Fehler in der Server es selbst).

Ich denke, ich könnte die Anfrage Callback-Klasse irgendwie verspotten, aber es ist für den Test unsichtbar.

Ich bin verloren, Hilfe!

Beispiel des Codes unten (Ich werde die ganze Sache später veröffentlichen, falls jemand will).

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. 
    } 

} 

Antwort

2

Es sieht aus wie Sie versuchen, den eigentlichen Transport zu verspotten, so dass Sie ein Modell der RequestBuilder Klasse bauen sollte. In JMockit, könnten Sie schreiben:

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 */ 
    } 
} 

Sie werden in den Details der ausfüllen müssen, was Sie das Mock tun wollen. Außerdem können Sie die Callback-Tests isolieren, wenn Sie den Rückruf zu einer benannten Klasse Instanz bewegen Innenseite der äußeren Klasse:

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

Durch das Callback-Objekt in eine Klasse zu bewegen und eine Factory-Methode verwenden, können Sie Tests erstellen, die überprüfen Sie nur den Rückruf.

+0

Verwendet, gearbeitet, liebte es: D – Diones