在VS2005 Team Suite版本中,其自身所带的Team System testing tool是一个功能强大,使用方便的单元测试工具。有人评论,其性能较之NUnit有过之而无不及。
在Team System testing tool中,最常用的当然是对方法的测试,其中包括对私有方法的测试。其他类型的单元测试还有:数据驱动型单元测试、ASP.NET 单元测试和 Web 服务单元测试,在这里不做讨论。
下面我们来看看如何使用Team System testing tool进行单元测试。
使用Team System testing tool进行单元测试,总的可以分成生成单元测试、管理单元测试、运行单元测试和单元测试结果和分析四步。
1. 创建单元测试
一般来说,我们都选用自动生成测试代码来生成单元测试,其实你也可以通过自己编写测试代码来创建单元测试。
自动生成单元测试有四种生成途径,分别为:
a. 在解决方案资源管理器中右击某个测试项目,指向“添加”,再单击“单元测试”。
b. 在解决方案资源管理器中右击某个测试项目,指向“添加”,再单击“新建测试”。在“添加新测试”对话框中单击“单元测试向导”,再单击“确定”。
c. 在“测试管理器”窗口或“测试视图”窗口中右击窗口图面,再单击“新建测试”。在“添加新测试”对话框中单击“单元测试向导”,再单击“确定”。
d. 在 Visual Studio 代码编辑器中,右击要测试的命名空间、类或方法并选择“创建单元测试”。
完成以上操作中的某一步后,将显示“创建单元测试”对话框。
其中会出现一个树状结构,显示代码所属程序集的类和成员层次结构。使用此页可以为选定的所有成员或类生成单元测试,并可以选择要在其中放置生成的单元测试的项目。最初在树状结构中选定的代码元素是您右击的元素及其包含的所有子元素。该选择是基于当前光标位置的。
完成以上操作后,依次进行下列操作来最终生成单元测试代码。
(可选)单击“筛选器”可更改显示的类和成员层次结构的内容。
(可选)通过选中其复选框选择其他代码元素。
(可选)单击“设置”可更改此测试的生成配置设置。例如,可以为要生成的测试文件、类和方法更改默认的命名选项。完成后,单击“确定”。
单击“确定”。
2. 管理单元测试
在生成了针对于某一方法的单元测试代码后,该单元测试还不能来对该方法进行测试,这时就需要通过对单元测试的管理、编辑来完成在测试代码运行前的最后准备。
在“测试管理器”或“测试视图”中,右击要打开的测试,再单击“打开”,或者双击测试。测试的源代码文件打开并滚动到相应的测试方法。然后在方法中找到需要编辑的语句:
如string data = null; // TODO: 初始化为适当的值
在语句后注释有// TODO: 初始化为适当的值的语句是对需要测试的方法的参数赋初始值。如上面的语句,是对string型的参数data赋了一个null的初始值。
对于测试代码来说,光有初始值是不够的,我们还需要有一个或多个结果值,这个(些)结果值是为了与测试代码执行后所得的返回值进行比较,从而验证所测的方法是否存在逻辑上的Bug。
一般定义成系统自动定义的expected变量是要来赋预想的结果值,如
byte[] expected = { 103, 53, 104, 54, 53, 58, 55, 56, 60, 62, 56 };
上面的语句为预计执行完测试代码后应该得到的数据是一个byte型数组,其数组值如上所示。至于程序最后所得到的结果是不是与上面预想的一致就要看该测试方法了。
最后就是将Assert.Inconclusive("验证此测试方法的正确性。");该语句去掉或者注释掉,否则在执行完测试代码后的结果是“没有结论”。
在完成了上面的所有操作后,我们可以进入测试代码的运行阶段了。
3. 运行单元测试
可以通过以下的几种方式来运行我们现在所需要进行的测试代码:
a.右击“测试视图”窗口中的测试,再单击“运行选定内容”。
b.选择“测试视图”窗口中的测试,再单击“测试视图”工具栏上的“运行选定内容”。
也可以在“测试管理器”窗口中选中一个测试。然后,
c.单击“测试管理器”工具栏上的“运行选中的测试”。
d.右击窗口图面,再单击“运行选中的测试”。
e.在“测试管理器”窗口中,在仅包含要运行的测试的测试列表旁边放一个选中标记,再单击“测试管理器”工具栏上的“运行测试”。
d.在“测试结果”窗口中选中一个测试结果后,单击“测试结果”窗口状态栏上的“重新运行”。
选择以上六种方式中的某一种都能够运行所需的测试代码。我们也可以选择“调试选定内容”对方法进行逐行调试。
4. 单元测试结果和分析
在完成了单元测试的运行后,在“测试结果”中会返回一个结果(通过,失败,没有结论 中的某一个)
通过:测试运行通过成功。
失败:测试未通过,其原因可能是语法错误,也可能是逻辑错误导致运行结果与预想的结果不一致引起的。
没有结论:有可能是Assert.Inconclusive("验证此测试方法的正确性。");该语句没有去掉或注释掉所引起的。