NUnit详细使用方法(6)

发表于:2011-05-08来源:不详作者:领测软件测试网采编点击数: 标签:
ExpectedException 这里是一个验证这个假设的测试.有的时候,我们知道某些操作会有异常出现,例如, 在实例中增加除法,某个操作被0除,抛出的异常和.NET文档描述

  ExpectedException

  这里是一个验证这个假设的测试.有的时候,我们知道某些操作会有异常出现,例如, 在实例中增加除法,某个操作被0除,抛出的异常和.NET文档描述的一样.参看以下源代码.

 

1[Test]
2[ExpectedException(typeof(DivideByZeroException))]
3public void DivideByZero()
4{
5 int zero = 0;
6 int infinity = a/zero;
7 Assert.Fail("Should have gotten an exception");
8}
9

  除了[Test]属性之外, DivideByZero方法有另外一个客户属性: ExpectedException.在这个属性里,你可以在执行过程中捕获你期望的异常类型,例如在本例就是DivideByZeroException.如果这个方法在没有抛出期望异常的情况下完成了,这个测试失败.使用这个属性帮助我们写程序员测试验证边界条件(Boundary Conditions).

  Ignore 属性

  由于种种原因,有一些测试我们不想运行.当然,这些原因可能包括你认为这个测试还没有完成,这个测试正在重构之中,这个测试的需求不是太明确.但你有不想破坏测试,不然进度条可是红色的哟.怎么办?使用Ignore属性.你可以保持测试,但又不运行它们.让我们标记MultiplyTwoNumbers测试方法为Ignore属性:

 

1[Test]
2[Ignore("Multiplication is ignored")]
3public void MultiplyTwoNumbers()
4{
5 int product = a * b;
6 Assert.AreEqual(2, product);
7}

  运行测试,现在产生了下面的输出(在图5-1显示):

  图 5-1: 在一个程序员测试中使用 Ignore属性

  Ignore属性可以附加到一个独立的测试方法,也可以附加到整个测试类(TestFixture).如果Ignore属性附加到TestFixture,所有在fixture的测试都被忽略.

  TestFixtureSetUp/TestFixtureTearDown

  有时,一组测试需要的资源太昂贵.例如,数据库连接可能是一个关键资源,在一个test fixture的每个测试中,打开/关闭数据库连接可能非常慢.这就是我在开始提到的问题.如何解决?NUnit有一对类似于前面讨论的SetUp/TearDown的属性:

  TestFixtureSetUp/TestFixtureTearDown.正如他们名字表明的一样,这些属性用来标记为整个test fixture初始化/释放资源方法一次的方法.

  例如,如果你想为所有test fixture的测试共享相同的数据库连接对象,我们可以写一个打开数据库连接的方法,标记为TestFixtureSetUp属性,编写另外一个关闭数据库连接的方法,标记为TestFixtureTearDown属性.这里是描述这个的例子.

 

1using NUnit.Framework;
2
3[TestFixture]
4public class DatabaseFixture
5{
6 [TestFixtureSetUp]
7 public void OpenConnection()
8 {
9 //open the connection to the database
10 }
11
12 [TestFixtureTearDown]
13 public void CloseConnection()
14 {
15 //close the connection to the database
16 }
17
18 [SetUp]
19 public void CreateDatabaseObjects()
20 {
21 //insert the records into the database table
22 }
23
24 [TearDown]
25 public void DeleteDatabaseObjects()
26 {
27 //remove the inserted records from the database table
28 }
29
30 [Test]
31 public void ReadOneObject()
32 {
33 //load one record using the open database connection
34 }
35
36 [Test]
37 public void ReadManyObjects()
38 {
39 //load many records using the open database connection
40 }
41}
42
43

  Test Suite

  Test Suite是test case或其他test suite的集合. 合成(Composite),模式描述了test case和test suite之间的关系.

  参考来自NUnit的关于Suite的代码

原文转自:http://www.ltesting.net