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 on 2007-03-07 15:05 张逸 阅读(3614) 评论(14)  编辑 收藏 网摘 所属分类: .NET FrameWork

评论

#1楼  2007-03-07 15:14 Tony.Gong      

用Nunit习惯了
对vs的这个功能怎么看都不顺眼   回复  引用  查看    

#2楼  2007-03-07 15:35 crabo [未注册用户]

我都用相对路径: ../../../source.txt   回复  引用    

#3楼  2007-03-07 15:53 dotneturls [未注册用户]

还没怎么用这个功能,以前VS2003中用那个TestDriven.net也可以集成在VS中,很不错的。

===========================================
http://***/gb.aspx —.net开发资源精华收集,正在不断更新及完善中,欢迎推荐资源并提出意见和建议!   回复  引用    

#4楼 [楼主] 2007-03-07 15:59 Bruce Zhang      

@Tony.Gong
利用NUnit,在调试测试用例时,无法设置断点。用集成的测试工具自有它的一些优势。习惯是可以改变的。
@crabo
仔细想想,用相对路径也是不能解决我说的问题的。   回复  引用  查看    

#5楼  2007-03-07 16:06 Koy      

有一个叫TestDriver的工具,可以调试测试用例,,还可以是集成到vs ide中!   回复  引用  查看    

#6楼  2007-03-07 16:07 reonlyrun      

@Tony.Gong

不错,回头研究一下这个东东,谢谢   回复  引用  查看    

#7楼  2007-03-07 17:23 Tony.Gong      

@Bruce Zhang
有时候需要设置断点的话,我直接attach NUnit的进程,然后运行某test case ,一样可以debug到
不过就是麻烦很多   回复  引用  查看    

#8楼  2007-03-07 18:51 无常      


我也喜欢用VS2005集成的测试   回复  引用  查看    

#9楼  2007-03-07 23:02 Woodcode [未注册用户]

我也碰到同样的问题. 现在明白了   回复  引用    

#10楼  2007-03-08 00:33 jchdong      

学习   回复  引用  查看    

#11楼  2007-03-08 13:37 deerchao      

其实可以把需要读写的文件放到解决方案里,然后在属性栏里把“拷贝到输出目录”改成true就行了。   回复  引用  查看    

#12楼  2007-03-09 09:52 peng [未注册用户]

Vs.2005自带那个我的电脑是跑不动...跑起来非常慢.
还是用NUnit,可以使用TestDriver,也可以断点,比用Vs自带的快些..
  回复  引用    

#13楼  2007-03-09 16:39 eeee [未注册用户]

peng:
集成有集成好处,当然,轻巧也有它自己的好处, :-)   回复  引用    

#14楼  2007-11-23 00:22 DonnyTian [未注册用户]

to deerchao :
我试了一下修改solution文件的属性只会把文件复制到bin\debug下面,所以并不能解决楼主的问题. 看来目前只有楼主的方法可行.

如果大家有什么好的方法希望能发信给我,我不常来,google到的,呵呵
paradise80@gmail.com
另外,我也赞成尽量用集成的工具,省时省力   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-07 15:14 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 

导航

公告

logo.gif
我的著作与译作

《软件设计精要与模式》

《WCF服务编程》

MVP_Horizontal_BlueOnly.png

From 03-03-2006
Counter: site stats

与我联系

搜索

 

常用链接

我参加的小组

我参与的团队

随笔分类(245)

随笔档案(237)

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜