为简单起见,我们采取一个非常简单的课程:
public class TestingClass {
public void method1(){
System.out.println("Running method 1");
method2();
}
public void method2(){
System.out.println("Running method 2");
}
}
现在我正在编写一个简单的测试,它检查当我们调用method1()时,调用method2():
class TestingClassSpec extends Specification {
void "method2() is invoked by method1()"() {
given:
def tesingClass = new TestingClass()
when:
tesingClass.method1()
then:
1 * tesingClass.method2()
}
}
通过执行此测试,我收到以下错误:
运行方法1运行方法2
调用次数太少:
1 * tesingClass.method2()(0次调用)
为什么我收到此错误?打印日志显示调用了method2()。
答案 0 :(得分:5)
在测试真实对象上的交互时,您需要使用间谍,请参阅下文:
@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class TestingClassSpec extends Specification {
void "method2() is invoked by method1()"() {
given:
TestingClass tesingClass = Spy()
when:
tesingClass.method1()
then:
1 * tesingClass.method2()
}
}
public class TestingClass {
public void method1(){
System.out.println("Running method 1");
method2();
}
public void method2(){
System.out.println("Running method 2");
}
}