Java 带有输入文件的JUnitParamsRunner-字符串参数问题
我想将JUnit测试参数移动到单独的CSV文件中。我这样使用JUnitParamsRunner:Java 带有输入文件的JUnitParamsRunner-字符串参数问题,java,csv,junit,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 Interrupte
@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文件中传递带有特殊符号的字符串参数?提供自定义映射程序来解析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();
}
}
}
@RunWith(JUnitParamsRunner.class)
公共类TestClass{
@试验
@文件参数(value=“src/test/resources/input.csv”,mapper=CustomMapper.class)
public void testMethod(int-assertResult,String-inputMark){}
公共静态类CustomMapper扩展了IdentityMapper{
@凌驾
公共对象[]映射(读卡器){
Object[]map=super.map(读卡器);
列表结果=新建LinkedList();
用于(对象线对象:贴图){
String line=lineObj.toString();
int index=line.indexOf(“,”);
字符串arg1=line.substring(0,索引);
字符串arg2=line.substring(索引+1,line.length());
添加(新对象[]{arg1,arg2});
}
返回result.toArray();
}
}
}
对于更复杂的解决方案,您应该在CustomMapper
中使用regexp来正确解析CSV数据