Как написать несколько модульных тестов с использованием фреймворка Spock? - PullRequest
0 голосов
/ 28 октября 2018

Цель этого теста - взять массив целых чисел, найти максимальное значение и посчитать частоту этого максимального значения.Как бы я изменил этот код для тестирования несколько раз.Кроме того, я хотел бы знать, является ли это правильным подходом к тестированию этой проблемы.

Я новичок в 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 голосов
/ 29 октября 2018

Как сказал Джон Камерин, вы, вероятно, ищете 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
}

Aпара наблюдений:

  • Обратите внимание, что здесь я не использовал интерполяцию строк (без «$ result» и «$ test»)

  • Обратите внимание на as int[] в блоке where.Альтернативой этому будет def candles = new BirthdayCandles(testInput as int [])

0 голосов
/ 28 октября 2018

Вы можете добавить блок 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
}

и просто добавьте строки, чтобы добавить тестовые варианты.

...