单元测试入门——使用NUnit框架
单元测试是一种针对源码、低层次的,为程序员设计的测试。可以保证所写的代码符合软件需求和遵循开发的目标,并在软件开发早期减少程序Bug的数量,单元测试是方法层面上的测试,也是测试中粒度最小的测试。
为什么需要单元测试?
关于单元测试的重要性,这里的文章写得很详细:程序员为什么不写单元测试?
1.下载和安装Nuint
在.NET 开发中我们既可以使用Visual Studio 自带的测试框架,也可以使用开源的Nunit框架,二者在使用上并没有太大的区别,在这里我们使用Nunit框架来作为我们的单元测试工具。
1.1 下载并安装Nunit框架
首先我们到Nunit项目的主页去下载Nunit的最新版本和查看帮助文档,Nunit项目的主页:http://www.nunit.org/。在下载页面我们可以下载安装包格式或者是免安装的程序压缩包,在这里我们下载的是最新版2.6.2的安装程序,下载后安装。
2. 第一个单元测试
首先创建一个NunitQuickStart的类库项目并添加对nunit.framework.dll 文件(在Nunit的安装目录中)的引用。
2.1 创建一个被测试类
这是一个包含寻找最大数方法的Cmp类:
1 public class Cmp 2 { 3 /// <summary> 4 /// 寻找最大数 5 /// </summary> 6 /// <param name="list">int数组</param> 7 /// <returns></returns> 8 public static int Largest(int[] list) 9 { 10 int index, max = Int32.MaxValue; 11 for (index = 0; index < list.Length; index++) 12 { 13 if (list[index] > max) 14 { 15 max = list[index]; 16 } 17 } 18 return max; 19 } 20 }
2.1 创建单元测试
测试代码要做要最好的准备:
- 准备测试所需要的各种条件
- 调用要测试的方法
- 完成后清理各种资源
在Nunit框架中使用断言(一些辅助函数用于帮助程序员确定被测试函数是否正常工作),下面是Nunit中的各种断言:
1.相等性测试
AreEquals —— Assert.AreEqual(7.8599, 7.85,0.01,"ok");
2.验证给定对象是否为空/非空
IsNull —— Assert.IsNull(object[,string message])
IsNotNull(object[,string message])
3.引用相同测试
AreSame(expected,actual[,string message])
4.验证给定二元条件是否为真/假
IsTrue(bool condition[,string message])
IsFalse(bool condition[,string message])
5.Fail —— 使测试立即失败
单元测试原则: 当有测试失败时,就不能再给原有代码添加新特性,应该先修复这个失败的测试,然后再做其他的工作。
创建测试类
创建测试类和测试方法都是通过使用特性来添加的,测试类需要加上TestFixture特性,且必须为Public(该类必须有一个Public的默认无参构造函数);测试方法需要加上Test特性,且必须为Public
下面是测试类的代码:
1 [TestFixture] 2 public class TestLargest 3 { 4 /// <summary> 5 /// 测试Largest函数是否支持负数 6 /// </summary> 7 [Test] 8 public void LargestOfNegative() 9 { 10 Assert.AreEqual(-7, Cmp.Largest(new int[] { -9, -7, -8 })); 11 } 12 13 /// <summary> 14 /// 测试Largest函数对Null数组的处理 15 /// 如果该测试方法没有抛出AggregateException异常,测试失败 16 /// </summary> 17 [Test, ExpectedException(typeof(AggregateException))] 18 public void LargestOfEmpty() 19 { 20 Cmp.Largest(new int[] { }); 21 } 22 }
2.2 运行单元测试
- NUnit GUI —— 使用图形用户界面
- NUnit command —— 使用命令行
- Visual Studio Plug(Visual NUnit) —— 使用Visual Studio 插件
使用GUI方式只需要直接打开运行Nunit程序,选择File——>Open Project,选择创建项目,测试类项目所在目录中选择编译后的DLL文件,即可:
直接点击Run运行测试:
我们可以看到,状态条变成了红色,这表示我们的测试没有通过,绿色表示测试通过,黄色表示某些测试忽略。根据测试结果的反馈,我们修改代码:
1 /// 寻找最大数 2 /// </summary> 3 /// <param name="list"></param> 4 /// <returns></returns> 5 public static int Largest(int[] list) 6 { 7 if (list.Length == 0) 8 { 9 throw new AggregateException("Largest: empty list"); 10 } 11 int index, max = Int32.MinValue; 12 for (index = 0; index < list.Length; index++) 13 { 14 if (list[index] > max) 15 { 16 max = list[index]; 17 } 18 } 19 return max; 20 }
再次运行测试:
或者可以选择更方便的方式:选择创建的测试类库项目——>点击鼠标右键——>选择属性:
选择"调试选项",选择启动外部程序,输入Nunit Gui程序所在路径:选择后就可以直接运行类库项目来启动Nunit GUI程序了。
使用Visual Nunit插件:
下载地址:http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099/
安装后,将插件的输出面板显示出来:视图——> 其他窗口——>Visual Nunit,可以直接在点击Run,运行测试:
运行测试:
示例下载:NuintQuickStart