我有用于测试我的Java应用程序的Spock集成测试。对于其中一种方法,调用将转到实际方法“ bMethod()”,而不是返回存根的值。它对于另一个方法'aMethd()'可以正常工作,并返回存根值,而不调用实际方法。这两种方法都属于Calc类。有没有一种方法可以调查Spock在做什么以及为什么?

public interface CalcIntf {
  public int aMethod(int a, int b);
  public int bMethod(int a, int b, int c);
}

MyTestSpec extends Specification {
    def "aMethod test"() {
        given:
          ...
          CalcIntf calcIntf = Mock(CalcIntf)
          calcIntf.aMethod(_,_) >> { return 100; }
        when:
          //service call
        then:
          // asserts go here
    }

    def "bMethod test"() {
        given:
          ...
          CalcIntf calcIntf = Mock(CalcIntf)
          calcIntf.bMethod(_,_,_) >> { return 100; }
        when:
          // service call
        then:
          // asserts go here
    }
}

最佳答案

尝试类似的东西

given: 'a math with a calculator that always returns 100'
    def calc = Stub(CalcIntf) {
        bMethod(_,_,_) >> 100
    }
    def math = new Math(calc)

when: 'the math is asked to calculate something'
    def result = math.m2()

then: 'it returns 100'
    result == 100


注意事项:


推到存根上的返回值应该是返回的值,而不是闭包
您必须通过构造函数或其他方式在数学中设置存根计算
您在数学上调用的方法不带参数

10-06 05:01