单元测试入门——使用NUnit框架

单元测试入门——使用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和VS插件这两种种方式进行演示,命令行方式可以查看Nunit文档:
  • 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

      

猜你喜欢

转载自blog.csdn.net/sbayje/article/details/8513180