Java中的参数化jUnit测试:将jUnit 4.11中的“自定义测试名称”功能(@Parameters(name =“namestring”))与junitparams @FileParameter结合使用?

时间:2014-03-11 01:07:33

标签: java unit-testing junit parameterized

使用Java中的参数化测试,jUnit 4.11(@Parameters(name =“namestring”))中公开的“自定义测试名称”功能是否可以与Google junitparams中的任何功能结合使用?

我有一个Java测试,它循环一个包含一组视图名称的文件进行比较。不要报告单个测试,而是希望每个比较报告为单独的测试实例,为视图名称定制的每个测试名称作为输入提供。

理想情况下,想使用junitparams @FileParameter加载包含名称集的文件,将字符串传递给jUnit'name ='以用作测试名称​​和也作为输入输入到测试中。 '@FileParameter'和'name ='功能都可以相对简单地独立实现。

根据其doc页面,junitparams与jUnit 4.11“兼容”,但我还没有找到一种方法来结合上述两个功能。虽然我可以在没有语法或运行时错误的情况下向同一测试提供@FileParameter和@Parameters符号,但运行结果似乎忽略了后者的存在。

有人这样做过吗?有更好/更简单的选择吗?对交易所的第一个真实问题,所以请耐心等待......

= CJS

2 个答案:

答案 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[]
}

}