Welcome

首页 / 软件开发 / .NET编程技术 / Visual Studio 2008单元测试功能学习笔记

Visual Studio 2008单元测试功能学习笔记2010-10-31 博客园 Enjoy Everyday1、Team Test 是 Test System 集成的单元测试框架,它支持:

测试方法存根 (stub) 的代码生成。

在 IDE 中运行测试。

合并从数据库中加载的测试数据。

测试运行完成后,进行代码覆盖分析。

2、测试存根的生成:

单元测试是对某个方法的测试,因此测试的单位是方法;

右键点击类或者方法,“创建单元测试”;

自动生成单元测试存根时,可以选择为一个类下的多个方法同时生成单元测试代码。

VSTT支持对私有方法的测试,这时你可能会看到一些利用反射机制生成的代理类。(与NUnit不同)。

3、测试项目的结构组织:

首先需要将测试代码组织到单独的测试项目中,保持产品代码的干净。(VS支持专门的测试类项目);

生成的测试项目包含了对 Microsoft.VisualStudio.QualityTools.UnitTestFramework和 待测试项目的引用。

建议每个目标类对应一个测试类,物理上对应一个.cs文件;

4、

测试代码实现:

测试类的结构:

每个待测试目标类生成一个对应的加上 [TestClass()]声明的测试类;

关于目标类的每个方法,对应测试类中的一个用 [TestMethod()]声明的方法;测试方法的签名必须是无参数的实例方法

[ClassInitialize()]和[ClassCleanup()]标识的静态方法,表示测试类的初始化代码和测试类中所有单元测试执行完毕后执行的方法;

[TestInitialize()]和[TestCleanup()]标识的实例方法,表示每个单元测试执行前都要运行的一段代码;

Team Test 使用反射机制在测试程序集中搜索所有由 TestClassAttribute 修饰的类,然后查找由 TestMethodAttribute 修饰的方法来决定执行的内容

测试断言类Assert

Assert断言类是用来判断测试是否通过的关键类,它里面有各种各样强大的测试方法,如果这些方法没有获得预期的结果,那么测试失败。

一个测试中可以有多个测试断言。

Assert断言中的出错提示应尽可能的准确和明白。

使用 Assert.Inconclusive("TODO: 实现用来验证目标的代码")来表示一些尚未完全实现的测试,此时测试结果表现为一个不同于“通过”和“未通过”的第三种状态。

期待异常:

一般方法:

[ExpectedException(typeof(ArgumentException),

"A userId of null was inappropriately allowed.")]

更灵活的方法:

在测试方法中try和catch,然后比较catch到得异常的类型和你预期的异常的类型是否相同使用,不同则报错:

Assert.IsNotNull(exception,

"The expected exception was not thrown.");

Assert.AreEqual<Type>(

typeof(ArgumentException), exception.GetType(),

"The exception type was unexpected.");