Некоторые из возможностей Spock Framework 0.4 начинают выходить в свет, а таблицы данных были объяснены на прошлой неделе в хорошем блоге Питера Нидервизера. Одна из новых функций, которых я раньше не видел, — это новое расширенное использование @Unroll. Смешанный с таблицами данных, он дает очень интересные результаты, и его можно использовать со спецификацией 0,3 стиля. Вот сок:
Интеграция JUnit и @Unroll
Spock построен на JUnit и всегда имел хорошую поддержку IDE без каких-либо усилий со стороны пользователя. По большей части IDE просто считают, что Spock — это еще один модульный тест. Вот спецификация Спока для новой функции Таблицы данных и ее отображение в IDE.
import spock.lang.*
class TableTest extends Specification {
def "maximum of two numbers"() {
expect:
Math.max(a, b) == c
where:
a | b | c
3 | 7 | 7
5 | 4 | 5
9 | 9 | 9
}
}
Утверждение будет выполнено 3 раза: по одному разу для каждой строки в таблице данных. И JUnit точно сообщает имя метода правильно, даже если в именах методов есть пробел:

@Unroll
def "maximum of two numbers"() {
expect:
Math.max(a, b) == c
where:
a | b | c
3 | 7 | 7
5 | 4 | 5
9 | 9 | 9
}
При выполнении JUnit видит три метода тестирования вместо одного: по одному для каждой строки в таблице данных:

@Unroll("maximum of #a and #b is #c")
def "maximum of two numbers"() {
expect:
Math.max(a, b) == c
where:
a | b | c
3 | 7 | 7
5 | 4 | 5
9 | 9 | 9
}
Обратите внимание на синтаксис #variable в параметре аннотации. # Производит своего рода GString-подобную подстановку переменных, которая позволяет вам связывать столбцы из вашей таблицы данных с именем вашего теста. Параметр аннотации ссылается на #a, #b и #c, что соответствует определению таблицы данных для | б | с. Проверьте вывод IDE:

Моя любимая часть игры с новым @Unroll — видеть значение параметра по умолчанию в исходном коде Спока:
java.lang.String value() default "#featureName[#iterationCount]";
Поговорим о том, чтобы есть свою собачью еду … значение по умолчанию — это шаблон имени теста, как вы могли бы написать в своем собственном тесте. Заставляет задуматься, какие еще переменные находятся в области видимости, а?
Сборки снимков Spock для 0.4 доступны по адресу: http://m2repo.spockframework.org . Получите его до разрыва связи.