扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:CSDN 2007年8月31日
关键字:
这些只是自动化单元测试套件许多用法中的一部分。我曾经听说一个小团队使用单元测试查看针对其组件的已知安全攻击。从宏观的角度来看,单元测试应该明确保证组件的正常使用。具有丰富的测试集将使团队确信您已经准确实现了既定的目标:编写有效的软件。无论自信源自哪里 — 这就是您需要编写的测试。
您测试什么?
从本质上看,这些自动化单元测试非常低级。它们旨在测试下至构造函数、方法调用的对象,甚至是对象上的属性。
关于“公共对私有”的主题在单元测试派系中引发了许多争论。许多人认为单元测试只应该测试对象的公共接口。其他人认为应该测试每个调用 — 包括内部私有方法。VSTS 支持两个单元测试级别。VSTS 通过使用私有访问器或包装类支持私有测试,后者提供基于“私有”方法和属性生成单元测试的功能。
为什么生成代码?
阅读上面的列表后,您可能会想起前面项目的单个对象,并思考:“如果我用“这些”对象进行该操作,就需要编写大量代码!”请考虑开发人员仍编写“单元测试”代码的事实 — 只在不同的窗体(例如,前面提到的 WinForms 示例)上进行。此外,具有可自行记录、可重用的实现示例带来的好处远大于生成更多代码所带来的麻烦。最后,在单元测试中设计更多的环节已证明可以减少质量保证环节中的故障。
正如前面所提到的,代码生成是“软件创建软件”的过程。基于可重复的过程创建代码是理想的。例如,一些使用代码生成的较好示例包括:脚本数据、创建表示实体及其在储存库(数据库 CRUD)中存在的对象,或者创建适用于数据维护的 UI 控件。使用代码生成的好处包括:
? 节省时间 — 为什么花几小时/天/周创建一些在几秒/分钟内就可以创建的内容?
? 强制标准/约定— 对于强制您的标准和命名约定而言,没有什么比消除开发中的人员因素并依赖基于“您的”规则的可重复过程更好的了。
? 测试私有方法的功能 — 正如本文前面提到的,Unit Testing Framework 提供使用“私有访问器”类测试私有方法的功能。该代码生成引擎创建与这些访问器类相关的所有“基础代码”。
? 获取现有组件的信息 — 搜索另一个开发人员的组件吗?基于这些组件生成代码可能提供关于该实现以及该对象接口的简明示例。此外,进行设计并在编码之前“清除”其对象的公共接口(例如,通过使用 VS 2005 类设计器)的开发人员将极大地受益于代码生成引擎。
正如您所预期的,自动化单元测试属于“优秀代码生成候选者”。在现有组件中指出一些内容并针对这些自动单元测试生成初始代码难道不是很理想吗?而且不只是保留单元测试框架,还会围绕对象的公共接口生成实现示例吗?将来的 Visual Studio 2005 Team System 用户将拥有该功能以及更多功能!
让我们生成一些代码吧!
本例中,我们将生成本文前面提到的 BankAccount 类的代码。本文的这一部分旨在为您介绍代码生成过程,并重点介绍所提供的功能以及从 VSTS 使用 Unit Testing 引擎的好处。
第 1 步:创建您的实现代码
首先,我们创建一个将用作应用程序的业务层的类库项目。
要在 VS 2005 中创建该库:
1.
启动 Visual Studio 2005 Beta 2。
2.
单击 File | New | Project。
3.
选择您选定的语言 Windows,并选择 Class Library 项目模板。
4.
将 Name 和 Solution Name 设置为 BankAccountDemo.Business,选择一个位置,并单击 OK 来创建该类库。
VS 2005 创建该类后,下一个任务就是创建针对您的项目设计的 BankAccount 类。为此,需要执行以下操作:
1.在解决方案资源管理器中单击右键,并单击 Delete,从项目中移除该文件并将其从硬盘中删除。
2.右键单击 BankAccountDemo.Business 项目,然后单击 Add,之后单击 Class。
3.选择文件名 BankAccount.cs,并单击 Add 创建类文件。
4.针对 BankAccount.cs 文件对代码进行以下更改。
using System;using System.Collections.Generic;using System.Text;namespace BankAccountDemo.Business{ public class BankAccount { // Properties private float _currentBalance; public float CurrentBalance { get { return _currentBalance; } } // Constructors public BankAccount(float initialBalance) { this._currentBalance = initialBalance; } // Methods public void DepositMoney(float depositAmount) { this._currentBalance += depositAmount; } public void MakePayment(float paymentAmount) { this._currentBalance -= paymentAmount; } }}
第 2 步:生成您的初始单元测试代码
由于 Unit Testing 引擎内置于 Visual Studio 2005 Team System,因此生成代码比以前更容易。除了生成单元测试结构之外,它将生成特定于实例的信息,例如,对象创建、类型化参数和方法执行。
VS 2005 提供在任何类结构级别生成单元测试代码的功能,这些级别包括命名空间、类、方法、属性、构造函数,等等。可通过右键单击这些代码元素并单击 Generate test(s)(图 3)进行此操作。
图 3. Generate test(s) 方法 |
因此,要开始代码生成过程,请执行以下步骤:
右键单击该类名 BankAccount 并单击 Create Tests。
现在,应该为您提供 Generate Unit Tests 对话框(如图 4 所示)。该对话框及其组件提供对该过程中生成的代码进行自定义的功能。让我们看一下所有这些元素。
图 4. 生成 Unit Tests 对话框 |
Current selection: 树视图允许导航自定义类及其元素。VS 2005 使用反射填充该树视图,并在右键单击以及单击 Create Tests 的位置自动选择组件。图 3 中,由于我在类级别进行了此操作,因此该对话框自动选择用于代码生成的所有类元素。如果选择在单个级别(即,构造函数、属性或方法)进行生成,则只选择那些元素。
Filter 选项(位于右上角)提供修改树视图(图 5)中所示结果的功能,包括显示非公共项、基类型以及“只属于我的代码”。如果使用的是大型解决方案,或者感觉显示私有的内部结构会弄乱选择窗口,那么这对您很有益处。
图 5. 筛选选择结果 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者