读入测试用例数据
问题
如何从测试用例文件(简单的文本文件)中读入每条测试用例。
设计
通过while循环遍历用例文件的每一行,使用System.IO.StreamReader对象读入测试用例。
方案
FileStream fs = new FileStream("..\..\TestCases.txt",FileMode.Open); StreamReader sr = new StreamReader(fs); string line; while ((line = sr.Reader()) != null) { //解析每个测试用例行 //调用待测方法 //判断通过与否 //记录测试用例结果 } sr.Close(); fs.Close(); |
注解
通常来说,控制台程序相比于Windows窗体程序,更适合用来编写轻量级的自动化测试程序。控制台程序很容易集成到遗留下来的测试系统,而且在Windows环境下也很容易操纵。如果你要把测试程序写成窗体程序,请不要忘了让这个程序也可以通过命令行来进行操纵。
本方案假定已经把using System.IO;语句放到测试程序的代码里,这样就可以使用FileStream和StreamReader类而不用每次都引用它们的全名。我们还假定测试用例数据文件被命名为TestCase.txt,并且被放在测试程序所在目录的上两级目录。对于测试用例数据文件来说,相对路径通常要比诸如C:\\Here\\There\\TestCase.txt这样的绝对路径要好,因为相对路径允许把测试程序的根目录和子目录做为一个整体进行移动,而不会打乱测试程序的路径。但是,如果测试系统的目录结果改变了,那么相对路径就会打乱你的测试程序。还有一种做法是:把测试数据文件的路径和名字作为测试程序的参数:
static void Main(string [] args) { string testCaseFile = args[0]; FileStream fs = new FileStream(testCaseFile,FileMode.Open); //etc. } |
这样一来,就可以像下面的这样调用测试程序:
C:\\Harness\bin\Debug>Run.exe ..\..\TestCase.txt
在本方案中,用到了FileStream和StreamReader对象,另外也可以使用System.IO.File类中的一些静态方法,如File.Open().如果预计到可能会有两个或者更多测试程序同时访问测试用例文件,可以使用重载过的FileStream的构造函数,它包含一个FileShare参数用来指定如何共享这个文件。