这是在使用Spock进行“数据驱动”测试的背景下进行的:
where:
key << myDriver.myMap.keySet()
。。。工作正常:关键值已交付,参数化测试工作正常。
但如果我试试这个:
where:
key << { myDriver.myMap.keySet() }
它不起作用。然后对象位于
<<
是一个
Closure
.然后,我尝试了很多方法,试图诱使“数据提供者”摆脱这一困境
关闭
。
我想首先在那里做一个闭包,这样我可以调试一点,但也可以提供一组更复杂的排列(不仅仅是“关键”值,还有其他测试参数的值……请参见我最近的一个问题
here
)。
也许这对
keySet()
:原来这是
LinkedHashMap$LinkedKeySet
。。。但很明显
Iterable
。
我对这个“数据提供者”类别有点困惑。在斯波克的“教程”中,它说这必须实现
可迭代的
.它并没有说这是否就是它的全部特征。离去
{ myDriver.myMap.keySet() }.iterator()
没有帮助。。。
iterator()
显然可以
Iterator
不
可迭代的
无论如何然后我得到的是这样的恐怖:
非常棒。lang.MissingMethodException:没有方法签名:
果心MyModule。processCommand()适用于参数类型:
(core.UT\u ForMyModule$\u spock\u feature\u 1\u 12prov0\u closure8,
joptsimple。OptionSet,java。util。ArrayList)值:
[核心.UT\u ForMyModule$\u spock\u feature\u 1\u 12prov0_closure8@65fdd86b,…]
。。。这显然意味着
迭代器
在
Collection
正好是一个
关闭
。
那么,简而言之,我如何获得
可迭代的
从返回
可迭代的
?