我有一个带有重载方法过程的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
这个方法不能像我期望的那样模拟方法过程(ProcessClass ...)。我咨询了http://spockframework.org/spock/docs/1.0/interaction_based_testing.html,但我无法理解。
如何模拟MyClass.process(ProcessClass)以便我可以从中返回一个假答案并将其传递给其他流程函数?
答案 0 :(得分:0)
Spock模拟,存根和间谍基于Java或CGLIB动态代理。这些反过来创建运行时的子类,覆盖所有 public 方法并挂钩它们以提供模拟测试所需的精美功能。但是,您使用私有方法,这解释了为什么这不起作用。此外,除非绝对必要,否则测试私人方法和使用间谍是不好的做法。什么使得有必要在这里使用间谍?