我正在使用:
关于Spock与@Unroll
合作我对where
块有以下情况
我可以拥有以下内容:
where: "Internal"
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport << [ControllerSupportTest.METHODNAME_FINDONE_BYID, ControllerSupportTest.METHODNAME_FINDONE_BYID ]
在某种程度上恼人的部分是数据必须与项目或结构的数量相似,在本例中为2。
我的意思是,以下失败:
where: "Internal"
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport << [ControllerSupportTest.METHODNAME_FINDONE_BYID]
您现在可以看到的methodNameReport
有一个项目。
Spock抛出异常。
由于我可以测试多个网址,因此我会使用ControllerSupportTest.METHODNAME_FINDONE_BYID
多次重复ControllerSupportTest.createUrl#()
项,其中#{5}例如
我可以通过以下方式处理:
注意:它是 Java 类
public class MyDataSetUtil {
private static final Integer COUNTER = 2;
private MyDataSetUtil(){
}
public static List<String> uris(){
String[] uris = new String[COUNTER];
uris[0] = ControllerSupportTest.createUrl1()
uris[1] = ControllerSupportTest.createUrl2()
}
public static String[] methodNames(){
String[] methodNames = (String[])
createArray(ControllerSupportTest.METHODNAME_FINDONE_BYID);
return methodNames;
}
private static String[] createArray(String value){
String[] objects = new String[COUNTER];
for(int i=0; i<COUNTER; i++){
objects[i] = value;
}
return objects;
}
}
直到这里我有两种问题
where
块添加新变量,例如mediaType
,那么我必须创建一个新方法,例如methodNames()
ControllerSupportTest.METHODNAME_FINDONE_BYID
对于前两点,它反映如下:
例如:
public static String[] mediaTypes(){
String[] mediaTypes = (String[]) createArray(MediaType.APPLICATION_XML_VALUE);
return mediaTypes;
}
我还需要更多实用
我也从SO中读过以下帖子
但对于我的情况,我不想使用CSV 。
其他方法是通过SQL,例如:
但同样,对于我的情况,我不想使用SQL 但是。
对我来说这种方法更有趣:
在那篇文章中他有:
where:
[_, name, gender, expected] << new MultilineProvider(source: userData)
请参阅帖子中的MultilineProvider
代码。
因此我想做以下事情:
[uriRequestReport, methodNameReport, moreVariablesifExists] << [MyDataSetUtil.theMethod()]
要求:
我希望通过MyDataSetUtil.theMethod()
(参见上面的行)返回一个集合,其中每个项目代表的是
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport << [ControllerSupportTest.METHODNAME_FINDONE_BYID, ControllerSupportTest.METHODNAME_FINDONE_BYID ]
让我在where
块中轻松添加一个新变量,并快速更新Java类,避免多次重复相同的数据。
什么是最好的方法?请记住,代码应该基于Java。
我在没有解决方案的情况下对Google进行了研究。
如果您有更好的建议,欢迎
答案 0 :(得分:0)
只需编写将返回条目集的theMethod(),其中每个条目都包含一次测试运行所需的所有数据。 url的ArrayList,方法名的ArrayList和其他数据的ArrayList。然后将所有列表放在一个大的ArrayList或map中并返回此对象。
{
"urls":[list of urls]
"methods":[list of methodNames]
"otherdata":[listOfOtherData]
}
直接返回地图,或制作此类地图的arraylist。
答案 1 :(得分:0)
您可以尝试以下方法:
where: "Internal"
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport = [ControllerSupportTest.METHODNAME_FINDONE_BYID]