一、测试准备工作: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 加、减、乘、除 运算实现 /// <summary> /// 加法 /// </summary> public Double add(Double a, Double b) { return a + b; } /// <summary> /// 减法 /// </summary> public int subtract(int Minuend, int Subtrahend) { //被减数-减数 return Minuend - Subtrahend; } /// <summary> /// 乘法 /// </summary> public int multiply(int a, int b) { return a * b; } /// <summary> /// 除法 /// </summary> 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. 测试结果展示图
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的使用做介绍。