Visual Studio 2005单元测试中关于外部文件的问题解决

在Visual Studio 2005中撰写单元测试的测试用例,比之使用NUnit具有一定的优势,除了本身集成在IDE中之外,对于测试用例的调试也更加方便。在运行测试用例时,Visual Studio 2005有一个显著的特点,就是它会为测试结果单独建立一个TestResults文件夹。然后,每运行一次测试用例,都会创建包含了时间戳的文件夹,在Out文件夹中得到测试的结果。其中,还包含了测试项目以及它所引用的项目的程序集文件。

这带来一个问题。如果我们运行一个应用程序,当程序需要读写外部文件时,我们可以将其放入到编译运行时的debug目录下。在运行时,系统默认的当前目录就是debug目录。我们可以直接给出文件的名字,来访问相关文件。例如:
File.Open("test.txt", FileMode.Open);

现在,运行测试用例的当前目录是动态创建的,我们无法在代码中指定当前目录,以获得外部文件的完整路径。例如我们要测试的类对象,包含了设置读写文件的路径,如下:
[TestMethod]
public void TestReadAndWrite()
{
    TextFileOp op = new TextFileOp();
    op.SourceFile = "source.txt";
    op.TargetFile = "target.txt";
    op.Handle();
}

文件source.txt和target.txt应该放在何处呢?

方法是我们可以将这些外部文件统一放到Solution的一个文件夹,例如Files中。然后,我们打开Solution下的localtestrun.testrunconfig文件。此时会弹出如下图的对话框:

unittest.GIF

在左侧选择Deployment,单击Add Directory按钮,找到Files目录,并添加。如此以来,我们就可以利用如下方式编写单元测试代码:
[TestMethod]
public void TestReadAndWrite()
{
    string filePath = Directory.GetCurrentDirectory() + "\\";
    TextFileOp op = new TextFileOp();
    op.SourceFile = filePath + "source.txt";
    op.TargetFile = filePath + "target.txt";
    op.Handle();
}

Directory.GetCurrentDirectory()方法获得的当前目录就是随机创建的目录下的out文件夹。由于在localtestrun.testrunconfig文件中配置了Deployment的目录,在运行测试用例时,系统会自动将Files文件夹下的所有文件复制到out文件夹中,使得测试用例读写外部文件成为可能。

posted @ 2007-03-07 15:05  张逸  阅读(4846)  评论(14编辑  收藏  举报