Explicit属性
本属性忽略一个test和test fixture,直到它们显式的选择执行。如果test和test fixture在执行的过程中被发现,就忽略他们。所以,这样一来进度条显示为黄色,因为有test或test fixture忽略了。
例如:
1 2 [Test,Explicit] 3 [Category("Exception")] 4 [ExpectedException(typeof(DivideByZeroException))] 5 public void DivideByZero() 6 { 7 int zero = 0; 8 int infinity = a/zero; 9 Assert.Fail("Should have gotten an exception"); 10 } 11 |
为什么会设计成这样呢?原因是Ingore属性忽略了某个test或test fixture,那么他们你再想调用执行是不可能的。那么万一有一天我想调用被忽略的test或test fixture怎么办,就用Explicit属性了。我想这就是其中的原因吧。
Expected Exception属性
期望在运行时抛出一个期望的异常,如果是,则测试通过,否则不通过。
参看下面的例子:
1[Test] 2[ExpectedException(typeofInvalidOperationException))] 3public void ExpectAnException() 4 { 5 int zero = 0; 6 int infinity = a/zero; 7 Assert.Fail("Should have gotten an exception"); 8 9 } 10 |
在本测试中,应该抛出DivideByZeroException,但是期望的是InvalidOperationException,所以不能通过。如果我们将[ExpectedException(typeof(InvalidOperationException))]改为[ExpectedException(typeof(DivideByZeroException))],本测试通过。
5 . 测试生命周期合约
如果记得test case的定义,其中一个属性是测试的独立性或隔离性.SetUp/TearDown方法提供达到测试隔离性的目的.SetUp确保共享的资源在每个测试运行前正确初始化,TearDown确保没有运行测试产生的遗留副作用.
TestFixtureSetUp/TestFixtureTearDown同样提供相同的目的,但是却在test fixture范围里,我们刚才描述的内容组成了测试框架的运行时容器(test runner)和你写的测试之间的生命周期合约(life-cycle contract).
为了描述这个合约,我们写一个简单的测试来说明什么方法调用了,怎么合适调用的.这里是代码:
1using System; 2using NUnit.Framework; 3[TestFixture] 4public class LifeCycleContractFixture 5{ 6 [TestFixtureSetUp] 7 public void FixtureSetUp() 8 { 9 Console.Out.WriteLine("FixtureSetUp"); 10 } 11 12 [TestFixtureTearDown] 13 public void FixtureTearDown() 14 { 15 Console.Out.WriteLine("FixtureTearDown"); 16 } 17 18 [SetUp] 19 public void SetUp() 20 { 21 Console.Out.WriteLine("SetUp"); 22 } 23 24 [TearDown] 25 public void TearDown() 26 { 27 Console.Out.WriteLine("TearDown"); 28 } 29 30 [Test] 31 public void Test1() 32 { 33 Console.Out.WriteLine("Test 1"); 34 } 35 36 [Test] 37 public void Test2() 38 { 39 Console.Out.WriteLine("Test 2"); 40 } 41 42} 43 44 |
当编译和运行这个测试,可以在System.Console窗口看到下面的输出:
FixtureSetUpSetUpTest 1TearDownSetUpTest 2TearDownFixtureTearDown
可以看到, SetUp/TearDown方法调用在每个测试方法的前后. 整个fixture调用一次TestFixtureSetUp/TestFixtureTearDown方法.
下载:
1)NUnit的应用文档下载
2)本文的PDF版下载
3)本文的源代码 下载
参考
1) http://www.nunit.org
2) James W. Newkirk and Alexei A. Vorontsov ,Test-Driven Development in Microsoft .NET,Microsoft Press,2003
3) http://www.testdriven.com
4) Kent Beck, Test-Driven Development: By Example ,Addison-Wesley Professional, 2003
5) Andrew Hunt ,David Thomas ,Pragmatic Unit Testing In C# With NUnit