gpt4 book ai didi

java - 在 Java 类中进行模拟

转载 作者:行者123 更新时间:2023-12-02 08:37:16 25 4
gpt4 key购买 nike

所以我有这个 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.
}

}

最佳答案

看起来您正在尝试模拟实际的传输,因此您应该构建 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(...) { ... }
}
}

通过将回调对象移动到类中并使用工厂方法,您可以创建仅检查回调的测试。

关于java - 在 Java 类中进行模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com