最后,我能够在我的Java文件中获得Groovy类,并能够在我的groovy类上执行JUnit。现在我的问题是我想测试触发RPC调用的方法。但我想在单元测试中避免该调用。我该怎么办?下面是我注销我如何进行的示例代码
@Test
public void logoutTest() {
GroovyObject loginOject =new Login();
GroovyObject logoutObject =new Logout();
XMLRPCServerProxy serverProxy = (XMLRPCServerProxy) loginOject.invokeMethod(
"getServerProxy",
"https://urlproxy"
);
String sessionId = (String) loginOject.invokeMethod(
"getSession",
new Object[]{"username","password",serverProxy}
);
logoutObject.invokeMethod("logout",new Object[]{sessionId,serverProxy});
}
答案 0 :(得分:0)
你可以通过使用模拟来实现。我假设您正在测试调用logoutObject.invokeMethod("logout",new Object[]{sessionId,serverProxy});
上的方法的XMLRPCServerProxy serverProxy
方法。如果您可以选择引入对Mockito等模拟框架的依赖,那么您可以创建一个模拟而不是
XMLRPCServerProxy serverProxy = (XMLRPCServerProxy) oginOject.invokeMethod("getServerProxy", "https://urlproxy");
你可以嘲笑它
XMLRPCServerProxy serverProxy = mock(XMLRPCServerProxy.class);
when(serverProxy.sendRequest("payload")).thenReturn("result");
如果您不能使用模拟库,您可以在测试中扩展XMLRPCServerProxy
并覆盖执行rpc调用的方法,以执行您想要的任何操作(这实际上是Mockito将为您做的事情)
XMLRPCServerProxy proxyServer = new XMLRPCServerProxy() {
public String request(String payload) {
// your mock code
return "result";
}
};
答案 1 :(得分:0)
我建议使用Spock对Groovy(和Java)代码进行单元测试。最新的说到模拟,我知道没有Java工具/框架可以正确地模拟Groovy的东西,因为语言过于动态,无法通过编写钩住Java代码的工具来处理。
Spock是用Groovy编写的,当涉及到模拟和存根时,请考虑Groovy。如果你第一眼看到它,Spock可能看起来有些陌生,但是如果你习惯了语法,那么你可以做什么以及用不同的输入数据编写测试等等是多么容易。
Spock也基于JUnit,因此每个能够执行和评估JUnit测试的工具也能够应对Spock测试。