考虑到枚举源的所有值,如何在 Spock2 中创建数据驱动测试(基本上作为 Junit5 @EnumSource 的替代方案)?

How to create a data driven test in Spock2 considering all values of an enum source (basically as an alternative to Junit5 @EnumSource)?

我想考虑枚举中的所有值(有时排除一些值)来测试特定的系统行为。这可以在 Junit5 中使用 @EnumSource 注释轻松实现。 Spock2 是否有任何替代方案(或任何简单的解决方法)?

您可以使用 Spocks 能力将 any 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
}

这个测试当然会失败三次,因为名称不是空的,但它展示了如何迭代所有枚举值。