簡體   English   中英

如何使用 Spock 模擬重載的 Java 方法

[英]How to mock an overloaded Java method using Spock

我有一個帶有重載方法進程的 Java 類 MyClass:

class MyClass {
    private String process(String requestId, String request) {
       // Initial processing, creates processObject from request
       // then class actual processing:
       String temp = process ( processObject );
       // do stuff I want to test, generate response
       return response;
    };
    private String process( ProcessClass processObject ) {
       String result;
       // do actual processing of processObject
       return result;
    }
}

我想使用 Spock 測試第一個 process() 方法。 我正在嘗試使用 Spy 來模擬重載的進程(ProcessClass)。 到目前為止,這是 testProcess.groovy:

class TestProcessUsingString extends Specification {
   given:
      def testInput = "TestInput"
      def myObject = Spy(MyClass) {
         process(_ as ProcessClass) >> "My result string"
      }
   when:
      def response = myObject.process("TestInput")
      // Check response

這種方法不能像我預期的那樣模擬方法 process(ProcessClass...)。 我已經咨詢過http://spockframework.org/spock/docs/1.0/interaction_based_testing.html但我無法弄清楚。

我如何模擬 MyClass.process(ProcessClass) 以便我可以從中返回一個假答案並將其傳遞給另一個進程函數?

Spock 模擬、存根和間諜基於 Java 或 CGLIB 動態代理。 這些反過來創建子類確保運行時,覆蓋所有公共方法並掛鈎到它們以提供模擬測試所需的花哨功能。 然而,您使用私有方法,這解釋了為什么這不起作用。 此外,除非絕對必要,否則測試私有方法和使用間諜是不好的做法。 是什么讓我們有必要在這里使用間諜?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM