3
假设我有一种方法将一些数据填充到列表中,并在内部调用另一个方法(我正在独立测试),并将一些数据填充到列表。这里最好的测试方式是什么?如何为调用其他方法的方法编写spock测试用例
如何测试外部方法?我是否也应该从内部方法检查数据,否则只测试由外部方法填充的数据是否正常?
假设我有一种方法将一些数据填充到列表中,并在内部调用另一个方法(我正在独立测试),并将一些数据填充到列表。这里最好的测试方式是什么?如何为调用其他方法的方法编写spock测试用例
如何测试外部方法?我是否也应该从内部方法检查数据,否则只测试由外部方法填充的数据是否正常?
鉴于测试下面的类:
class MyTestClass {
int getAPlusB() { return getA() + getB() }
int getA() { return 1 }
int getB() { return 2 }
}
我可以写出如下斯波克测试,以检查该算法是正确的,而且还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
}
到目前为止,这是运行所有3种方法的所有代码 - getA和getB被验证为被调用,但实际上正在执行那些方法中的代码。在你的情况下,你正在单独地测试内部方法,并且在本次测试中你根本不想打电话给他们。通过使用spock间谍,你可以实例化一个真正被测试的类,但是可以选择你想要指定返回值的特定方法:
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
}