所以我有这个GWT代码处理RPC请求维护状态(准备,等待,错误等)。 我想检查一下每次调用后类是否正确改变状态,设置响应变量等。
现在我应该如何在不向服务器发出实际请求的情况下进行测试(可能会在服务器中遇到错误)。
我想我可以以某种方式模拟请求回调类,但它对测试是不可见的。
我迷路了,帮帮忙!
下面的代码示例(如果有人想要,我会在以后发布所有内容)。
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.
}
}
答案 0 :(得分: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(...) { ... }
}
}
通过将回调对象移动到类中并使用工厂方法,您可以创建仅检查回调的测试。