单元测试——Using NUnit

【简介】

   在.NET平台下进行单元测试,我们首先想到的应该是NUnit。NUnit是一个专门针对.NET的单元测试框架,也是.NET平台上使用得最为广泛的测试框架之一。

   在NUnit之前,有针对Java的JUnit,针对C++的CPPUnit,它们都属于xUnit家族。NUnitxUnit家族种的第4个主打产品,全由C#语言来编写,并且编写时充分利用了许.NET的特性,比如反射,客户属性等等,最重要的一点是它适合于所有.NET语言。

关于NUnit的安装以及简单运用,在这里不做过多的描述。详情请移步《单元测试——NUnit工具安装及简单运用


下边,我们先看一个非常简单的测试用例(TestCase):

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>[Test]
 public void AdditionTest()
{
  int expectedResult = 2;

    Assert.AreEqual(exptectedResult, 1 + 1);
}</strong></span>
    也许,这个TestCase在很多人看来很低级,但是我的理解并不是这样。NUnit本来就是编写单元测试的简易框架,单元测试的复杂之处在于如何在实际项目中应用和实施,而不是徘徊于如何使用NUnit。


【Demo】

    下边,我们通过一个Demo,来了解一下在单元测试中如何使用NUnit。

    使用NUnit做单元测试,可以使用它的客户端,也可以在VS中安装“Nunit Test Adapter”插件,这样测试的结果可以在VS中可视化。



在本文中我们使用Nunit Test Adapter插件,来查看测试结果。

加减乘除的Demo框架基本上是这样的:



1、首先,新建一个类库:Caluclate。然后编写其中的代码(加减乘除的例子)

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Caluclate
{
    //加减乘除运算实例
    public class Calculate
    {
        //控制台应用程序,程序的入口
        static void Main(string[] args)
        {
        }

        //无参构造函数
        public Calculate() { }

        #region 加减乘除运算的具体实现

        /// <summary>
        /// 加法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public int Add(int a, int b)
        {
            return a + b;
        }

        /// <summary>
        /// 减法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public int Subduction(int a, int b)
        {
            return a - b;
        }

        /// <summary>
        /// 乘法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public int Multiply(int a, int b)
        {
            return a * b;
        }

        /// <summary>
        /// 除法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public int Divide(int a, int b)
        {
            if (b == 0)
            {
                Console.WriteLine("除数不能为零!");
                return 0;
            }
            else
            {
                return a / b;
            }
        }
        #endregion
    }
}
</strong></span>

2、然后是测试类(CaluclateTest)

在测试类CaluclateTest中,我们需要添加对NUnit的引用:



然后进行测试类CaluclateTest代码的编写:

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;       //添加对NUnit服务的引用
using Caluclate;                    //导入“被测试类”的命名空间

namespace CaluclateTest
{
    [TestFixture]        //单元测试的关键字

    //作为一个测试类,
    //1、必须是public,否则NUnit看不到它的存在
    //2、必须有一个缺省的构造函数,否则NUnit不会构造它
    public class CaluclateTest
    {
        [Test]        //Test作为标识符、关键字
        //测试方法必须没有参数,并且不返回任何参数,且必须为public。
        public void TestAdd()
        {
            //对象实例化
            Calculate add = new Calculate();

            //利用测试数据,对加法进行测试
            int result = add.Add(2, 3);

            //设置断言:5为expected期望值;result为actual真实值
            Assert.AreEqual(5, result);
        }

        //[Test]可以扩展写成[Test(Description="")],对本测试进行简单的描述
        [Test(Description = "减法Subduction()测试")]
        public void TestSubduction()
        {
            Calculate subduction = new Calculate();
            int result = subduction.Subduction(8, 5);
            //我们在这里,将4设置成我们的expected期望值
            //Assert.AreEqual(4, result);
            Assert.AreEqual(3,result);
        }
    }
}
</strong></span>

3、然后,进行测试



测试代码中,关于断言Asser的使用,可以参考下边这张表,表中是经常用到的一些断言。


在这里,只是抛砖引玉,更多关于断言的东西,请移步《NUnit断言大全


【后记】

    

    原来没有接触单元测试之前,那仿佛好像是一个很遥远、很神秘的东西,一直无法触及。经过最近几天的了解,发现单元测试并不是我们想象中的那样,我们要想写出出色的代单元测试必须陪伴我们左右。


    陌生的东西不可怕,因为我们有一颗去探索它的心。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值