Groovy SpockExecutionException:数据提供程序没有数据

Groovy SpockExecutionException:数据提供程序没有数据,groovy,spock,unroll,Groovy,Spock,Unroll,我做了大量的搜索,虽然我找到了一些点击,但似乎没有一个是非常有用的 我只做过几次数据提供者,但它似乎非常适合这个。我有以下静态方法: static List<ContactPointType> getAddressTypes() { List<ContactPointType> result = new ArrayList<>(); for (ContactPointType cpType : ContactPointType.values(

我做了大量的搜索,虽然我找到了一些点击,但似乎没有一个是非常有用的

我只做过几次数据提供者,但它似乎非常适合这个。我有以下静态方法:

static List<ContactPointType> getAddressTypes() {
    List<ContactPointType> result = new ArrayList<>();

    for (ContactPointType cpType : ContactPointType.values()) {
        if (cpType.toString().endsWith("Addr")) {
            result.add(cpType);
        }
    }

    return result;
}

就像我说的,这看起来很简单。有人有什么想法吗?

好吧,我已经尝试了数据提供程序功能,它可以正常工作:

@Unroll("max(1, #cpType) == #cpType")
class MyFirstSpec extends Specification {
  def "let's try this!"() {
     expect:
       Math.max(1, cpType) == cpType
     where:
       cpType << dataProvider()
  }

  List<Integer> dataProvider() {
      [2,3,4]
  } 
}
因此,我的想法是,在数据提供程序实现中,可能最终会出现一个空列表,这就是它不起作用的原因

另一种可能的情况是(老实说,这一想法不太现实),Groovy/Java互连搞砸了

因此,在总结决议方面:

  • 尝试使用一些更简单的数据提供程序实现并测试它
  • 如果它不起作用-只需在Groovy中定义像我这样的数据提供程序并重新测试
  • org.spockframework.runtime.SpockExecutionException: Data provider has no data
    
        at org.spockframework.runtime.JUnitSupervisor.afterFeature(JUnitSupervisor.java:191)
        at org.spockframework.runtime.BaseSpecRunner.runFeature(BaseSpecRunner.java:236)
    
    @Unroll("max(1, #cpType) == #cpType")
    class MyFirstSpec extends Specification {
      def "let's try this!"() {
         expect:
           Math.max(1, cpType) == cpType
         where:
           cpType << dataProvider()
      }
    
      List<Integer> dataProvider() {
          [2,3,4]
      } 
    }
    
     List<Integer> dataProvider() {
       [] // returns an empty list
     }
    
     org.spockframework.runtime.SpockExecutionException: Data provider has no data
      at org.spockframework.runtime.JUnitSupervisor.afterFeature(JUnitSupervisor.java:180)
      at org.spockframework.runtime.BaseSpecRunner.runFeature(BaseSpecRunner.java:239)