使用Java中的参数化测试,jUnit 4.11(@Parameters(name =“namestring”))中公开的“自定义测试名称”功能是否可以与Google junitparams中的任何功能结合使用?
我有一个Java测试,它循环一个包含一组视图名称的文件进行比较。不要报告单个测试,而是希望每个比较报告为单独的测试实例,为视图名称定制的每个测试名称作为输入提供。
理想情况下,想使用junitparams @FileParameter加载包含名称集的文件,将字符串传递给jUnit'name ='以用作测试名称和也作为输入输入到测试中。 '@FileParameter'和'name ='功能都可以相对简单地独立实现。
根据其doc页面,junitparams与jUnit 4.11“兼容”,但我还没有找到一种方法来结合上述两个功能。虽然我可以在没有语法或运行时错误的情况下向同一测试提供@FileParameter和@Parameters符号,但运行结果似乎忽略了后者的存在。
有人这样做过吗?有更好/更简单的选择吗?对交易所的第一个真实问题,所以请耐心等待......
= CJS
答案 0 :(得分:2)
使用@Parameters
注释的JUnit测试必须与
@RunWith(Parameterized.class)
然而,junitparams使用它自己的跑步者
@RunWith(JUnitParamsRunner.class)
JUnit测试只能使用单个跑步者,所以除非有人将两个跑者合并为一个,否则我看不到它们如何一起工作。
最简单的解决方案是放弃junitparams并实现从输入文件读取数据并将其转换为参数列表的逻辑,以便您可以从使用@Parameters
注释的方法返回该值。
另一个解决方案是修改JUnitParamsRunner
,使其更像Parameterized
亚军的行为,例如为从输入文件读取的每个参数生成一个具有不同名称的测试。
另见:
答案 1 :(得分:0)
再看一遍,我同意。一点点的探索,发现junitparams不需要做我想要的。
丑陋的部分代码示例:
@RunWith(Parameterized.class) 公共类ParamSampleTest {
@Parameters(name = "{index} myTest : using [arg0 {0}] and [arg1 {1}]")
public static Collection<Object[]> data() throws FileNotFoundException {
return ParamSampleTest.mydataset();
}
private static Collection<Object[]> mydataset() throws FileNotFoundException {
<snip data read, get length>
ArrayList<Object[]> myList = new ArrayList<Object[]>(length);
<snip create String[][], populate, add to myList>
return myList; // return ArrayList of Object[]
}
}