如何使用Spock框架编写多个单元测试?

时间:2018-10-27 23:30:10

标签: java groovy tdd spock

此测试的目标是获取一个整数数组,找到最大值,并计算该最大值的频率。我将如何更改此代码以进行多次测试。另外,我想知道这是否是测试此问题的正确方法。

我是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
    }
}

2 个答案:

答案 0 :(得分:0)

您可以添加带值表的where:块,其中第一行是变量名称,可以在其余测试中使用。例如

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
}

,只需添加行即可添加测试版本。

答案 1 :(得分:0)

正如约翰·卡梅林(John Camerin)所说,您可能正在寻找spock中的Data Driven Testing

我将提供一个略有不同的答案:

def candles = new BirthdayCandles(testInput as int [])

一些观察结果:

  • 请注意,我在这里未使用字符串插值(没有“ $ result”和“ $ test”)

  • 请注意where块中的{{1}}。 替代方法是{{1}}