解析测试用例
问题
如何解析出由字符分隔开的测试用例的各个字段。
设计
使用String.Split()方法,把分隔符作为输入传给它,然后把返回值存入一个字符数组。
方案
string line,caseID,method;
string[] tokens,tempInput;
string expected;
whild((line = sr.ReadLine()) != null)
{
tokens = line.Split(':');
caseID = tokens[0];
method = tokens[1];
tempInput = tokens[2].Split(' ');
expected = tokens[3];
//etc.
}
注解
把一行测试用例数据读入一个字符串变量后,调用Split()方法,把冒号作为参数传给Split()方法,得到的结果就是原字符串中以冒号分开的各个部分,然后把这些子字符串赋给字符串数据tokens。这样tokens[0]保存的就是第一个字段,也就是测试用例ID(例如“001”),tokens[1]保存的字符串是待测方法的名称(例如"ArithmeticMean"),tokens[2]保存的是以字符串形式存在的输入向量(例如"2 4 8"),tokens[3]保存的是期望值(比如"4.667")。接下来,针对tokens[2],使用一个空格罕作为参数调用Split()方法,然后把结果赋给字符串数组tempInput,如果tokens[2]的内容是"2 4 8",那么tempInput[0]的内容就是"2",tempInput[1]的内容是"4",tempInput[2]的内容是"8"。
如果用到了多个分隔符,则可以创建一个包含这些分隔符的字符数组,并把这个数组传给Split(),例如:
char[] separators = new char[] {'#',':','!'};
string[] parts = line.Split(separators);
上述代码会把字符串变量按照"#"、":"或"!"分隔成多个子串,并且把子串赋给字符串数组parts。
对于轻量级的自动化测试程序来说,Split()方法可以满足大多数简单文本文件的解析。如果不用Split(),另一种很好的方法就是使用正则表达式,。使用正则表达式的好处是,它更为强大,也就是说只用很少几行代码就可以完成很多的解析工作。正则表达式的一个缺点是,不经常使用它们的人很难理解,因为跟C#比起来,正则表达式的语法相对来说较为生僻。