如何在JUnit Groovy中避免外部调用

时间:2017-12-06 11:25:56

标签: java groovy junit

最后,我能够在我的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});
}

2 个答案:

答案 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测试。