获得"调用太少"用spock进行单元测试

时间:2015-03-04 23:33:58

标签: spock

为简单起见,我们采取一个非常简单的课程:

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()。

1 个答案:

答案 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");
    }
}