一、测试准备工作: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. 测试结果展示图
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的使用做介绍。