如何为调用其他方法的方法编写spock测试用例

Jee*_*evi 3 testcase spock

假设我有一个方法将一些数据填充到列表中,它在内部调用另一个方法(我正在独立测试)并将一些数据填充到列表中.这里有什么最好的测试方法?

如何测试外部方法?我是否应该从内部方法检查数据,否则只测试外部方法填充的数据?

Pau*_*son 5

鉴于以下测试类:

class MyTestClass {
    int getAPlusB() { return getA() + getB() }
    int getA() { return 1 }
    int getB() { return 2 }
}
Run Code Online (Sandbox Code Playgroud)

我可以写出如下斯波克测试,以检查该算法是正确的,而且还getA()getB()实际上是由被称为getAPlusB():

def "test using all methods"() { 
    given: MyTestClass thing = Spy(MyTestClass)
    when:  def answer = thing.getAPlusB()
    then:  1 * thing.getA()
           1 * thing.getB()
           answer == 3
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是运行所有3个方法的所有代码 - getA和getB被验证为被调用,但这些方法中的代码实际上正在执行.在您的情况下,您正在单独测试内部方法,并且在此测试期间您根本不想调用它们.通过使用spock spy,您可以实例化测试中的类的实际实例,但是可以选择存根特定方法,以指定返回的值:

def "test which stubs getA and getB"() {
   given: MyTestClass thing = Spy(MyTestClass)
   when:  def answer = thing.getAPlusB()
   then:  1 * thing.getA() >> 5
          1 * thing.getB() >> 2
          answer == 7
}
Run Code Online (Sandbox Code Playgroud)