【发布时间】:2016-05-29 08:42:11
【问题描述】:
我正在与:
- Spring MVC
- Spring MVC 测试
- Spock 框架
关于 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 抛出异常。
由于我可以测试许多 URL,因此重复 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 进行了研究。
如果你有更好的建议,欢迎提出
【问题讨论】:
-
令人惊讶的是,这个问题没有标记到
java。 -
我的错误...已修复...
标签: java spock spring-test spring-test-mvc spock-reports