单元测试——NUnit测试简单实例

一、测试准备工作:NUnit的下载及安装

下载:http://download.csdn.net/detail/wangqingbo0829/8470143

安装使用:图解http://blog.csdn.net/wangqingbo0829/article/details/43975243

 

二、流程:

(1)存在一个已实现的“待测项目”,例:CountFunction

(2)新建一个测试项目最好以“待测项目名称.Test”命名,例:CountFunction.Test

(3)添加对待测项目的引用(步骤:①在“添加引用”处添加;②导入命名空间);

(4)添加引用nunit.framework;

(5)编写测试用例

 

三、实施测试

1. 加、减、乘、除这四则运算的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


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

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


        #region 加、减、乘、除 运算实现

		 /// 
         /// 加法
         /// 
         public Double add(Double a, Double b)
         {
             return a + b;
         } 	  

		/// 
        /// 减法
        /// 
        public int subtract(int Minuend, int Subtrahend)
        {
            //被减数-减数
            return Minuend - Subtrahend;
        } 

		/// 
        /// 乘法
        /// 
        public int multiply(int a, int b)
        {
            return a * b;
        } 

        /// 
        /// 除法
        /// 
        public double division(double dividend, double divisor)
        {
            if (divisor == 0)
            {
                Console.WriteLine("除数不能为0,算式无意义!");
                return 0;
            }
            else
            {
                return dividend / divisor;
            }
        }

        #endregion
    }
}

2. 编写测试用例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;				//导入命名空间
using CountFunction; 				//导入命名空间

namespace CountFunction.Tests
{
    [TestFixture]   //关键字
    public class ProgramTester
    {

        //1.1 必须有[Test]作为标识;
        [Test]      //关键字
        //1.2 访问权限必须为Public,必须无返回值void
        public void TestAdd()  //加法1
        {
            //实例化 生成 对象
            Methods addOne = new Methods();

            //利用测试数据,对方法进行测试
            double result = addOne.add(1, 2);

             //1.3 设置断言“3”为expected期望值;“result”为actual真实值。
            Assert.AreEqual(3, result);
        }


        //[Test]可扩展写成[Test(Description="")]对本测试进行简单描述
        [Test(Description = "加法Add()测试")]
        public void TestSubtract()  //减法
        {
            Methods subtractOne = new Methods();
            int result = subtractOne.subtract(2, 1);
            Assert.AreEqual(1, result);
        }


        [Test]
        public void TestMutiply()   //乘法
        {
            Methods mutiplyOne = new Methods();
            int result = mutiplyOne.multiply(1, 2);
            Assert.AreEqual(2, result);
        }


        [Test]
        public void TestDivision1()  //除法
        {
            Methods methodsOne = new Methods();
            //5为被除数,2为除数
            double result = methodsOne.division(5, 2);
            Assert.AreEqual(2.5, result);
        }


        [Test]
        public void TestDivision2()  //除法
        {
            Methods methodsTwo = new Methods();
            //程序运行,弹出提示信息“除数不能为0,算式无意义!”
            double result = methodsTwo.division(5, 0);
            Assert.AreEqual(0, result);
        }

    }
}

3. 测试结果展示图

单元测试——NUnit测试简单实例_第1张图片



4.  本文只用了一个简单的断言Assert.AreEqual(expected,actual)expected为期望值,actual为真实值。

然而,断言有很多种,浏览一下,将常用的列入表中,便于日后参见:

断言类型

说明

example

Assert.AreEqual(object expected, object actual[, string message])

验证两个对象是否相等

Assert.AreEqual(2, 1+1)

Assert.AreSame(object expected, object actual[, string message])

验证两个引用是否指向同意对象

object expected = new object();

object actual = expected;

Assert.AreSame(expected, actual)

Assert.IsFalse(bool)

验证bool值是否为false

Assert.IsFalse(false)

Assert.IsTrue(bool)

验证bool值是否为true

Assert.IsTrue(true)

Assert.IsNotNull(object)

验证对象是否不为null

Assert.IsNotNull(new object())

Assert.IsNull(object)

验证对象是否为null

Assert.IsNull(null);

详细的断言介绍:http://blog.csdn.net/newgrammer/article/details/932028

很值得参考的资料:http://blog.163.com/zyj880101@126/blog/static/115244882201082731110654/

 

四、测试扩展

在项目中,功能的实现,常常需要与其他版块交互,而如果其他版块尚未开发完成,或其他版块存在错误,使得当下版块无法运行、测试。一个小对象Mock很好地解决了这个问题而且对它的使用很简单。——下篇博客,将对Mock的使用做介绍。

你可能感兴趣的:(单元测试)