我想将我的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文件中的特殊符号传递字符串参数?
答案 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数据。