SpockExecutionException:数据提供者没有数据
SpockExecutionException: Data provider has no data
我进行了大量搜索,虽然我找到了一些结果,例如 Why does Spock think my Data Provider has no data?,但其中 none 似乎非常有帮助。
我只做过几次数据提供者,但它似乎非常适合这个。我有以下静态方法:
static List<ContactPointType> getAddressTypes() {
List<ContactPointType> result = new ArrayList<>();
for (ContactPointType cpType : ContactPointType.values()) {
if (cpType.toString().endsWith("Addr")) {
result.add(cpType);
}
}
return result;
}
然后我尝试将它用作数据提供程序来调用我的函数 class:
@Unroll("#cpType should be address")
def "isAddress addresses"() {
expect: "isAddress() to be true"
contactPoint.isAddress(cpType)
where:
cpType << getAddressTypes()
}
当我 运行 这个时,我得到:
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]
}
}
但是,如果我像这样重写 dataProvider 函数,我会看到您提到的异常:
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)
所以我的想法是,您可能最终在数据提供程序实现中得到一个空列表,这就是它不起作用的原因
另一种可能(尽管老实说有点不太现实)是你搞砸了Groovy/Java互连
因此,就总结而言:
- 尝试使用一些更直接的数据提供程序实现并对其进行测试
- 如果它不起作用 - 只需在 Groovy 和 re-test
中定义像我这样的数据提供者
我进行了大量搜索,虽然我找到了一些结果,例如 Why does Spock think my Data Provider has no data?,但其中 none 似乎非常有帮助。
我只做过几次数据提供者,但它似乎非常适合这个。我有以下静态方法:
static List<ContactPointType> getAddressTypes() {
List<ContactPointType> result = new ArrayList<>();
for (ContactPointType cpType : ContactPointType.values()) {
if (cpType.toString().endsWith("Addr")) {
result.add(cpType);
}
}
return result;
}
然后我尝试将它用作数据提供程序来调用我的函数 class:
@Unroll("#cpType should be address")
def "isAddress addresses"() {
expect: "isAddress() to be true"
contactPoint.isAddress(cpType)
where:
cpType << getAddressTypes()
}
当我 运行 这个时,我得到:
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]
}
}
但是,如果我像这样重写 dataProvider 函数,我会看到您提到的异常:
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)
所以我的想法是,您可能最终在数据提供程序实现中得到一个空列表,这就是它不起作用的原因
另一种可能(尽管老实说有点不太现实)是你搞砸了Groovy/Java互连
因此,就总结而言:
- 尝试使用一些更直接的数据提供程序实现并对其进行测试
- 如果它不起作用 - 只需在 Groovy 和 re-test 中定义像我这样的数据提供者