Fork me on GitHub
单元测试基础篇---VS2008

VS2008 Professional版本已经集成单元测试的功能,我们可以很方便地对我们的代码进行单元测试。

新建一个单元测试工程:

 

添加对要测试的工程的引用,之后就可以针对被测试工程进行测试代码的编写了。

 

 

 

单元测试工程会默认生成一个单元测试类,其中属性TestClass标识这个类为单元测试类  

1 [TestClass]
2 public class UnitTest1
3 {
4 
5 }

 

(1)      单元测试方法

单元测试方法用属性TestMethod标识,是针对每个测试用例编写的测试方法。单元测试还有一些常用的属性标签:Ignore标签表示单元测试运行时忽略当前方法,当单元测试方法未完成时,可添加此标签,暂时不运行当前方法;Description标签为当前测试方法添加说明。

1 [TestMethod]
2 public void TestMethod1
3 {
4 
5 }
 
 
在测试方法中,使用Assert断言方法对实际值和预期值进行对比,最常用的是预期值和实际值是否相等的断言。
Assert.AreEqual(6, Count);
还可以通过给方法添加ExpectedException属性来断言预期的异常:
[ExpectedException(typeof(ArgumentNullException))]

(2)      系统方法

单元测试运行时,用户可能需要统一初始一些变量或者测试结束统一释放占用资源,而不必在每个测试方法中初始化和资源回收。vs单元测试中提供了这样的属性

签。

1.       ClassInitialize

如果方法标识了这个属性。则这个方法在整个测试class运行开始时候运行。可以在这个方法中添加所有测试方法都需要初始化的初始化代码。 

TestContext中包含了单元测试的基本信息。

 

 

1 [ClassInitialize()]
2 public static void MyClassInitialize(TestContext testContext){ }
 
 
2.       ClassCleanup
标识了这个属性的方法会在这个测试class运行结束的时候运行,和上一个标签对应。 

3.       TestInitialize

1 [ClassCleanup()]
2 public static void MyClassCleanup(){ }
 
 
除了在整个测试class的开始和结束运行的方法外,还有针对每个测试方法的开始和结束的方法。有时候需要对测试方法用的实例进行必要的初始化,但是需要保证每个方法用的的实例和其他方法中的实例无关的,则需要在每个方法的开始初始化实例,在结束的时候恢复对实例的修改。
标识TestInitialize的方法会在每个测试方法开始之前运行。
1 [TestInitialize()]
2 public void MyTestInitialize() { }
4.       TestCleanup
标识TestInitialize的方法会在每个测试方法结束之后运行。
1 [TestCleanup()]
2 public void MyTestCleanup() { }
 测试代码完成后,可在测试代码文件中右键菜单中点击运行测试代码,也可以把测试工程设置为项目的启动项,按F5直接运行测试工程,调试测试代码。

 

 

会得到如下的测试运行结果。

红色部分为未通过的测试代码。

一般的单元测试要求一定的代码覆盖率,可以用如下的方式查看测试代码的覆盖率:

(1)    新建单元测试工程时,会自动在项目中生成如下的文件

双击这个文件,会弹出如下的对话框

选择Code Coverage,选中要查看覆盖率的工程,然后关闭对话框。

 

(2)    运行测试工程,查看覆盖率。

点击运行结果窗口上的覆盖率查看按钮,可以查看针对每个方法的覆盖率。

Vs2008集成的单元测试工具使用非常方便,是我们软件开发中不可或缺的工具之一,熟练运用能极大地提高我们软件开发的质量。


作者:Dang Jian
出处:http://www.cnblogs.com/dangjian/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
同时请关注我的独立博客-http://www.dang-jian.com

 

 一个单元测试类中包含有如下的内容:

posted on 2010-08-21 02:05  HackerVirus  阅读(291)  评论(0编辑  收藏  举报