簡體   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