参加完自考、软考,对单元测试都是概念上的理解,这篇博文主要是从实践上,讲解一下单元测试如何实现,使用什么工具,以及简单的实例讲解。
一、单元测试
单元测试,是开发者编写的一小段代码,用于检测被测代码一个很小、很明确的功能是否正确,是否和开发者所期望的一致。使用单元测试可以很轻松的实现:
1.静态类的测试
2.静态方法的测试
3.类的实例化测试
4.类的方法测试
二、Nunit简介
.NET下执行单元测试通常有两种方法:一个是微软在VS提供的单元测试,另一个是使用外部工具NUnit,前者可能有些复杂,但后者用起来却简单明了。
下载地址:下载Nunit
Nunit的启动有两种方式,一种是在客户端单独启动,这个时候需要指定已编译好的dll路径;另一种是集成在VS中启动,相对前者而言,后者用起来方便一些,在VS中安装插件【Nunit Test Adapter】就可实行测试结果的可视化了,插件直接在VS中搜索即可。
三、一个简单的Demo
通过一个简单的Demo,让大家感受一下,单元测试是非常容易实现的。
1.加入我们要测试的类为【Calculator】,里面有加、减、乘、除四个方法,代码如下:
namespace NUnitTest { public class Calculator { static void Main(string[] args) { Calculator cal = new Calculator(); int result = cal.Add(2,3); Console.WriteLine(result); Console.ReadKey(true); } /// <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 Minus(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) { return a / b; } } }
2.其次我们要建立一个测试类【CalculatorTest】,来测试类【Calculator】里面的方法,先看代码然后再给大家解释:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NUnit.Framework;//导入命名空间:NUnit.Framework using NUnitTest;//导入“被测试类”的命名空间 namespace TestNunitTest { [TestFixture] public class CalculatorTest { [Test] public void TestAdd() { Calculator cal = new Calculator(); int expected = 5; int actual = cal.Add(2, 3); Assert.AreEqual(expected, actual); } } }
2.1首先,我们要在项目中添加对NUnit的引用,也就是NUnit.Framework。
2.2其次,NUnit的常用属性介绍
①[TestFixture]
本属性用来标记一个类包含测试,用来指明该类是一个测试类。对这个类还有一些要求:
·该类必须是Public声明,否则NUnit看不到它的存在
·它必须又一个缺省的构造函数,否则NUnit不会构造它
·构造函数应该没有任何副作用,因为NUnit在运行时经常会构造这个类多次,如果要是构造函数要什么 副作用的话,那不是乱了.
②[Test]
本属性用来标记一个类(已经被标记为TestFixture)的某个方法是可测试的,为了和先前版本兼容, [test]忽略大小写。这个方法也有一些要求:
·这个方面必须为Public声明
·这个方法没有任何参数
·这个方法没有返回值
③Assert的使用
在Nunit中,Assert(断言)是一个类,包含以下方法:AreEqual,AreSame,Equals,Fail,Ignore等方 法,具体参见Nunit文档。
2.3最后,执行测试。在测试方法内部任意一处右击,点击【运行测试】即可。
显示最后结果:
总结:
至此,一个简单的单元测试便已经实现了。每当接触了一个新的事物,刚开始潜意识里总是觉得它不太容易掌握,但是在困难的东西都经不过自己的反复推敲,单元测试亦是如此。在解决新的问题,克服新的困难的过程中,不断提高着我们接收新事物的能力,增强着我们认识新事物的信心。