带输入文件的JUnitParamsRunner - 字符串参数问题

时间:2015-05-12 10:19:04

标签: java csv junit

我想将我的JUnit测试参数移动到单独的CSV文件中。我像这样使用JUnitParamsRunner:

@RunWith(JUnitParamsRunner.class)
public class TestClass {
...
@Test
    @FileParameters("src/test/resources/input.csv")
    public void testMethod(int assertResult, String inputMark) throws InterruptedException {
....

我的CSV文件就是那样

2,"xxx"
2,"xxx"
2,"xxxx,xxx-1"
4,"xxxx xxxxx-xx"

当我运行测试参数" xxxx,xxx-1"因为参数数量错误而给我java错误(我想因为里面有逗号)。如何在我的场景中使用CVS文件中的特殊符号传递字符串参数?

1 个答案:

答案 0 :(得分:0)

提供自定义映射器以解析CSV数据:

@RunWith(JUnitParamsRunner.class)
public class TestClass {

    @Test
    @FileParameters(value = "src/test/resources/input.csv", mapper = CustomMapper.class)
    public void testMethod(int assertResult, String inputMark) {}

    public static class CustomMapper extends IdentityMapper {
        @Override
        public Object[] map(Reader reader) {
            Object[] map = super.map(reader);
            List<Object> result = new LinkedList<Object>();
            for (Object lineObj : map) {
                String line = lineObj.toString();
                int index = line.indexOf(",");
                String arg1 = line.substring(0, index);
                String arg2 = line.substring(index + 1, line.length());
                result.add(new Object[] {arg1, arg2});
            }
            return result.toArray();
        }
    }
}

对于更复杂的解决方案 - 您应该使用CustomMapper中的正则表达式来正确解析CSV数据。