繁体   English   中英

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

[英]How to avoid external call in JUnit Groovy

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

您可以通过使用模拟来做到这一点。 我假设您正在测试logoutObject.invokeMethod("logout",new Object[]{sessionId,serverProxy}); XMLRPCServerProxy 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";
        }
    };

我建议使用Spock进行Groovy(和Java)代码的单元测试。 关于模拟的最新信息,据我所知,没有任何Java工具/框架能够正确模拟Groovy的东西,因为该语言过于动态,以至于无法通过编写工具插入钩挂Java代码来处理。

Spock是用Groovy编写的,在嘲笑和存根时要牢记Groovy。 如果您先看一下Spock,可能看起来有些陌生,但是如果您习惯了语法,则可以做的事情以及使用可变的输入数据编写测试的难易程度等等都非常令人惊讶。

Spock也是基于JUnit的,因此每个能够执行和评估JUnit测试的工具都能够应对Spock测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM