Как создать управляемый данными тест в Spock2 с учетом всех значений источника перечисления (в основном как альтернатива Junit5 @EnumSource)?

#groovy #spock #junit5

#groovy #spock #junit5

Вопрос:

Я хочу протестировать конкретное поведение системы с учетом всех значений (а иногда и исключая несколько) из перечисления. Этого можно легко достичь в Junit5 с помощью @EnumSource аннотации. Есть ли какая-либо альтернатива в Spock2 (или какое-либо простое обходное решение)?

Ответ №1:

Вы можете использовать способность Spocks использовать любой Iterable источник данных:

 import spock.lang.*

class EnumSpec extends Specification {
  def "let's try this!"(Color color) {
    expect:
    color.name() == ''

    where:
    color << Color.values()
  }
}

enum Color {
 RED, BLUE, GREEN
}
 

Этот тест, конечно, завершится трижды неудачно, поскольку имя не является пустым, но он показывает, как вы можете выполнить итерацию по всем значениям перечисления.