参加完自考、软考,对单元测试都是概念上的理解,这篇博文主要是从实践上,讲解一下单元测试如何实现,使用什么工具,以及简单的实例讲解。
一、单元测试
单元测试,是开发者编写的一小段代码,用于检测被测代码一个很小、很明确的功能是否正确,是否和开发者所期望的一致。使用单元测试可以很轻松的实现:
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);
}
///
/// 加法
///
///
///
///
public int Add(int a, int b)
{
return a + b;
}
///
/// 减法
///
///
///
///
public int Minus(int a, int b)
{
return a - b;
}
///
/// 乘法
///
///
///
///
public int Multiply(int a, int b)
{
return a * b;
}
///
/// 除法
///
///
///
///
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最后,执行测试。在测试方法内部任意一处右击,点击【运行测试】即可。
显示最后结果:
总结:
至此,一个简单的单元测试便已经实现了。每当接触了一个新的事物,刚开始潜意识里总是觉得它不太容易掌握,但是在困难的东西都经不过自己的反复推敲,单元测试亦是如此。在解决新的问题,克服新的困难的过程中,不断提高着我们接收新事物的能力,增强着我们认识新事物的信心。