vs2005 单元测试

测试方案:

 1.列出CR中所有的用户类

2.定好每个类中的属性,方法 以及传递参数,返回值;

3.建好类,不写具体的代码实现

4.创建测试类

5.测试类中写函数的测试代码

6.被测试类中属性,函数的代码实现,以及基本的语法排错测试

7.在测试类中运行测试函数,看是否通过。

测试思想:测试驱动开发 (TDD) 和先测试-后编码 (test-then-code) 的方法思想

               将测试程序和被测试程序分开处理。

测试工具:Team Test Visual Studio 集成的单元测试框架

      优点:1。测试方法存根 (stub) 的代码生成(自动生成基本的测试代码)

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

          (从数据库中加载测试数据,然后将其用于测试方法)

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

具体实现:

一、  VS2005单元测试功能介绍

1.       测试简介

VS2005提供的新功能,可以直接在解决方案中创建一个测试项目,对一个或多个项目进行测试。测试项目会自动生成大部分的测试代码,只需要修改入参等值便可对代码进行自动测试。

 2.TDD原理:调用类的方法,传递合适的参数,并验证返回值是否为所期望值 即:给出一个实际值,和一个期望值,实际值经过被测试函数调用后返回的结果与期望值相比较,如果相等则表示测试通过,否则表示测试不通过。

3. Assert

使用 true/false 命题验证单元测试中的条件。如果此条件计算为 true,则断言通过。通过引发 AssertFailedException 来发出信号表示测试失败。

Assert 类可对特定功能进行验证。单元测试方法执行开发代码中的方法代码,但只有包含 Assert 语句时才能报告代码行为方面的内容。

4. Team Test ,有两个重要的特性。首先,作为测试的方法由 TestMethodAttribute指定,另外,包含测试方法的类有 TestClassAttribute。这些属性都可以在 Microsoft.VisualStudio.QualityTools.UnitTesting.Framework 命名空间中找到。Team Test 使用反射机制在测试程序集中搜索所有由 TestClass修饰的类,然后查找由 TestMethodAttribute修饰的方法来决定执行的内容。另外一个重要的由执行引擎而不是编译器验证的标准是,测试方法的签名必须是无参数的实例方法。因为反射搜索 TestMethodAttribute,所以测试方法可以使用任意的名字

5.测试进行设置和清除的方法分别由属性 TestInitializeAttribute TestCleanupAttribute修饰。在每个这样的方法中,我们可以加入额外的代码,它们将会在每个测试前或者测试后运行

二.操作:

1.创建测试:

   创建一个类LogonInfo列出类中的所有属性和方法,属性,方法的实现不写

选中任意函数单击右键,选中“创建单元测试” 

  弹出如下页面: 如下图

选择要创建测试函数的函数,输入项目名,点击“确定”

在解决方案中添加了Teamtest 测试项目同时自动添加测试文件LogonInfoTest.cs:如下图 

LogonInfoTest.cs 中的构造函数自动生成测试函数ConstructorTest() 

根据需求改写ConstructorTest()函数 如下:

2.代码的实现

LogonInfo.cs中写构造函数LogonInfo 如下:

若构造函数LogonInfo,能使测试函数ConstructorTest运行通过则表示 构造函数没有问题,否则 构造函数LogonInfo 有问题。

3.运行测试:

   选择设置为启动项目 (Set as StartUp Project )。接着,使用菜单项调试 ->启动 ( F5 ) 或者调试 ->开始执行(不调试) ( Ctrl+F5 ) 开始运行测试。

这时出现测试结果窗口,列出项目中的所有测试

 选定测试并双击,打开“ConstructorTest[Results]”窗口

选中某一个测试函数,进行测试。

若构造函数LogonInfo,能使测试函数ConstructorTest运行通过则表示 构造函数没有问题,否则 构造函数LogonInfo 有问题。

4.空值处理:在测试类中写2个函数一个处理NULL ,一个处理“” 如下:

当输入值为 Null 或“” 时,没有捕获到参数异常则 表示属性函数 不通过

写属性函数如下:

写好后,运行上面的两个测试函数,若测试函数通过则表示本属性函数没有问题,否则属性函数有问题。

5. 从数据库中加载的测试数据 :

   在测试视图中任选一测试函数,右键属性:如下图:

进入属性编辑页面 如下图:可在其中设置:数据连接字符,数据表,

设置完成后在该测试函数的上面自动添加该测试函数的datasource属性,该属性指定的表返回每个记录时,该方法都会被调用一次。这就使测试代码使用运行中的测试的数据,如下图:

5.代码覆盖:查看在单元测试运行时测试了多少代码。

 注意:必须在非调试器中起用代码覆盖,即运行时选择“开始执行(不调试)”

 配置调试如下图:

点击“本地测试运行”弹出如下对话框:

选择要检测的项目,点击“应用”后,关闭该对话框。

点击“调试”---〉“开始执行(不调试)”

在代码覆盖率 结果视图中看到,本次测试的代码覆盖整体情况,如下图:

查看代码,在具体的代码页,分别用不同的颜色显示代码的执行块和未执行块

三.测试结果

<1       通过:说明测试的方法没有问题。

<2       错误:可以看到错误的测试名称、项目、错误信息等,方便找出错误产生的原因。

<3       没有结论:无法验证不返回值的方法。

四.其他

1.自动生成的测试代码通常会包括以下代码:(通常删掉)

Assert.Inconclusive("无法验证不返回值的方法。");

它会引发一个没有结论的异常。

2.关于Assert的成员,可以参考MSDN帮助文档,以下列出部分:

AreEqual

测试指定的值是否相等;如果两个值不相等,则测试失败。

AreNotEqual

测试指定的值是否不相等;如果两个值相等,则测试失败。

AreSame

测试指定的对象是否都引用相同的对象;如果两个输入内容引用不同的对象,则测试失败。

AreNotSame

测试指定的对象是否引用不同的对象;如果两个输入内容引用相同的对象,则测试失败。

Fail

断言失败。

Inconclusive

表示无法证明为 true 或 false 的测试结果。

IsTrue

测试指定的条件是否为 true;如果该条件为 false,则测试失败。

IsFalse

测试指定的条件是否为 false;如果该条件为 true,则测试失败。

IsNull

测试指定的对象是否为 空引用(在 Visual Basic 中为 Nothing);如果它不为空,则测试失败。

IsNotNull

测试指定的对象是否为非空;如果它为 空引用(在 Visual Basic 中为 Nothing),则测试失败。

五.参考资料见:http://msdn2.microsoft.com/zh-cn/library/ms379625(vs.80).aspx

  操作代码见:Teamtest.rar

posted @ 2008-04-21 19:11  冰封的心  阅读(353)  评论(0)    收藏  举报