[英]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.