我有一种非常不同的方法调用,我需要使用 JMockit 测试框架对其进行测试。首先让我们看一下代码。
public class MyClass{
MyPort port;
public registerMethod(){
Holder<String> status=null;
Holder<String> message=null;
//below method call is a call to a webservice in the real implementation using apache cxf framework. This method has a void return type. Read below for better explanation.
port.registerService("name", "country", "email", status, message);
// do some stuff with status and message here.....
HashMap response = new HashMap();
response.put(status);
response.put(message);
return response;
}
}
现在让我稍微解释一下。这个类基本上有一个端口实例变量,用于连接到 web 服务。webservice 实现使用自动生成的 apache cxf 框架类来连接到 webservice 并获取响应。我的工作是实现这个 web 服务调用的模拟,以便为真实应用程序中存在的许多类似调用编写测试用例。
这里的问题是 - 如果您注意到对 web 服务的调用实际上是由方法 port.registerService 通过发送名称、国家和电子邮件作为参数进行的。现在我们还将状态和消息变量作为参数本身传递给此方法。所以这个方法不是返回一些状态和消息的值,而是在这两个传递的参数中填充值,这与“返回”方法非常不同。
现在的问题是,当我尝试使用 jmockit 模拟这个调用时,我总是可以模拟这个调用,但是会发生什么?因为根本没有返回,所以结果是一个 void 调用,它填充了传递给它的参数中的值。因此,如果我模拟此调用,我将始终获得状态和消息为 null,因为我无法在 jmockit 实现中声明任何返回期望。
如果有人对上述问题有任何解决方案/建议,请回复并尝试帮助我。谢谢。