如何使用 Spock 框架编写多个单元测试?
How do I write multiple unit tests using Spock framework?
这个测试的目标是获取一个整数数组,找到最大值,并计算该最大值出现的频率。我将如何更改此代码以进行多次测试。另外,我想知道这是否是测试此问题的正确方法。
我是 TDD 的新手,目前正在练习为容易解决的练习题编写测试。
谢谢!
import spock.lang.Specification
class BirthdayCandlesTest extends Specification {
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
int[] test = [1,1,1,3,3,3,3]
def candles = new BirthdayCandles(test)
when: "I call the max number height method"
def result = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
result == 4
}
}
您可以添加一个 where: 块,其中包含 table 个值,第一行是可以在其余测试中使用的变量名称。例如
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
def candles = new BirthdayCandles("$test")
when: "I call the max number height method"
def result = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
result == "$result"
where:
test | result
[1,1,1,3,3,3,3] | 4
[1,1,1,3,3,3,4] | 1
}
只需添加行即可添加测试变体。
正如 John Camerin 所说,您可能正在 spock 中寻找 Data Driven Testing。
我会提供一个稍微不同的答案:
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
def candles = new BirthdayCandles(testInput)
when: "I call the max number height method"
def actual = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
actual == expectedResult
where:
testInput | expectedResult
[1,1,1,3,3,3,3] as int [] | 4
[1,1,1,3,3,3,4] as int [] | 1
}
一些观察:
注意我这里没有使用字符串插值(没有"$result"和"$test")
注意 where 块中的 as int[]
。
另一种选择是 def candles = new BirthdayCandles(testInput as int [])
这个测试的目标是获取一个整数数组,找到最大值,并计算该最大值出现的频率。我将如何更改此代码以进行多次测试。另外,我想知道这是否是测试此问题的正确方法。
我是 TDD 的新手,目前正在练习为容易解决的练习题编写测试。
谢谢!
import spock.lang.Specification
class BirthdayCandlesTest extends Specification {
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
int[] test = [1,1,1,3,3,3,3]
def candles = new BirthdayCandles(test)
when: "I call the max number height method"
def result = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
result == 4
}
}
您可以添加一个 where: 块,其中包含 table 个值,第一行是可以在其余测试中使用的变量名称。例如
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
def candles = new BirthdayCandles("$test")
when: "I call the max number height method"
def result = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
result == "$result"
where:
test | result
[1,1,1,3,3,3,3] | 4
[1,1,1,3,3,3,4] | 1
}
只需添加行即可添加测试变体。
正如 John Camerin 所说,您可能正在 spock 中寻找 Data Driven Testing。
我会提供一个稍微不同的答案:
def "GetNumberOfMaxHeightCandles"() {
given: "A BirthdayCandles object"
def candles = new BirthdayCandles(testInput)
when: "I call the max number height method"
def actual = candles.getNumberOfMaxHeightCandles()
then: "I should get the frequency count of the max number in the integer array"
actual == expectedResult
where:
testInput | expectedResult
[1,1,1,3,3,3,3] as int [] | 4
[1,1,1,3,3,3,4] as int [] | 1
}
一些观察:
注意我这里没有使用字符串插值(没有"$result"和"$test")
注意 where 块中的
as int[]
。 另一种选择是def candles = new BirthdayCandles(testInput as int [])