第5步.编译运行测试.
现在编译solution。成功编译后,开始应用程序。NUnit-Gui测试运行器出现。当你第一次开始NUnit-Gui,它打开时没有测试加载。从File菜单选择Oprn,浏览NUnitQuickStart.dll的路径。当你加载了测试的程序集,测试运行器为加载的程序集的测试产生一个可见的表现。在例子中,测试程序集仅有一个测试,测试程序集的结构如图4-4所示:
图 4-4: 测试程序集的测试在 NUnit-Gui中的视图
按Run按钮。树的节点变为绿色,而且测试运行器窗口上的进度条变绿,绿色代表成功通过。
4.其他的一些核心概念
上面的例子介绍了基本的NUnit特性和功能. TestFixture, Test, 和 Assert是3个最基本的特征,我们可以用这些特性进行程序员测试了.但是有的时候,你觉得这3个远远不够,比如有的时候打开一个数据库连接多次,有没有只让它打开一次的方法呢?如果我想把测试分类,应该怎样实现呢?如果我想忽略某些测试,又应该如何去完成呢?不用担心,NUnit已经有这样的功能了.
下面我们一一作出回答.
SetUp/TearDown 属性
在早期给的test fixture定义里,我们说test fixture的测试是一组常规运行时资源.在测试完成之后,或是在测试执行种,或是释放或清除之前,这些常规运行时资源在一确定的方式上可能需要获取和初始化.NUnit使用2个额外的属性:SetUp 和TearDown,就支持这种常规的初始化/清除.我们上面的例子来描述这个功能.让我们增加乘法.
1using System; 2using NUnit.Framework; 3 4namespace NUnitQuickStart 5{ 6 [TestFixture] 7 public class NumersFixture 8 { 9 [Test] 10 public void AddTwoNumbers() 11 { 12 int a=1; 13 int b=2; 14 int sum=a+b; 15 Assert.AreEqual(sum,3); 16 } 17 [Test] 18 public void MultiplyTwoNumbers() 19 { 20 int a = 1; 21 int b = 2; 22 int product = a * b; 23 Assert.AreEqual(2, product); 24 } 25 26 } 27} 28 |
我们仔细一看,不对,有重复的代码,如何去除重复的代码呢?我们可以提取这些代码到一个独立的方法,然后标志这个方法为SetUp 属性,这样2个测试方法可以共享对操作数的初始化了,这里是改动后的代码:
1using System; 2using NUnit.Framework; 3 4namespace NUnitQuickStart 5{ 6 [TestFixture] 7 public class NumersFixture 8 { 9 private int a; 10 private int b; 11 [SetUp] 12 public void InitializeOperands() 13 { 14 a = 1; 15 b = 2; 16 } 17 18 [Test] 19 public void AddTwoNumbers() 20 { 21 int sum=a+b; 22 Assert.AreEqual(sum,3); 23 } 24 [Test] 25 public void MultiplyTwoNumbers() 26 { 27 int product = a * b; 28 Assert.AreEqual(2, product); 29 } 30 31 } 32} 33 |
这样NUnit将在执行每个测试前执行标记SetUp属性的方法.在本例中就是执行InitializeOperands()方法.记住,这里这个方法必须为public,不然就会有以下错误:Invalid Setup or TearDown method signature