首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

NUnit2.0详细使用方法 (2)

2012-12-24 
NUnit2.0详细使用方法 (二)TestFixtureSetUp/TestFixtureTearDown ?? 有时,一组测试需要的资源太昂贵.例如

NUnit2.0详细使用方法 (二)
TestFixtureSetUp/TestFixtureTearDown ?? 有时,一组测试需要的资源太昂贵.例如,数据库连接可能是一个关键资源,在一个test fixture的每个测试中,打开/关闭数据库连接可能非常慢.这就是我在开始提到的问题.如何解决?NUnit有一对类似于前面讨论的SetUp/TearDown的属性: TestFixtureSetUp/TestFixtureTearDown.正如他们名字表明的一样,这些属性用来标记为整个test fixture初始化/释放资源方法一次的方法. ?? 例如,如果你想为所有test fixture的测试共享相同的数据库连接对象,我们可以写一个打开数据库连接的方法,标记为TestFixtureSetUp属性,编写另外一个关闭数据库连接的方法,标记为TestFixtureTearDown属性.这里是描述这个的例子.

?1NUnit2.0详细使用方法 (2)using?NUnit.Framework;?2NUnit2.0详细使用方法 (2)?3NUnit2.0详细使用方法 (2)[TestFixture]?4NUnit2.0详细使用方法 (2)public?class?DatabaseFixture?5NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2){?6NUnit2.0详细使用方法 (2)???[TestFixtureSetUp]?7NUnit2.0详细使用方法 (2)???public?void?OpenConnection()?8NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){?9NUnit2.0详细使用方法 (2)??????//open?the?connection?to?the?database10NUnit2.0详细使用方法 (2)???}11NUnit2.0详细使用方法 (2)?12NUnit2.0详细使用方法 (2)???[TestFixtureTearDown]13NUnit2.0详细使用方法 (2)???public?void?CloseConnection()14NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){15NUnit2.0详细使用方法 (2)??????//close?the?connection?to?the?database16NUnit2.0详细使用方法 (2)???}17NUnit2.0详细使用方法 (2)???18NUnit2.0详细使用方法 (2)???[SetUp]19NUnit2.0详细使用方法 (2)???public?void?CreateDatabaseObjects()20NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){21NUnit2.0详细使用方法 (2)??????//insert?the?records?into?the?database?table22NUnit2.0详细使用方法 (2)???}23NUnit2.0详细使用方法 (2)?24NUnit2.0详细使用方法 (2)???[TearDown]25NUnit2.0详细使用方法 (2)???public?void?DeleteDatabaseObjects()26NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){27NUnit2.0详细使用方法 (2)??????//remove?the?inserted?records?from?the?database?table28NUnit2.0详细使用方法 (2)???}29NUnit2.0详细使用方法 (2)?30NUnit2.0详细使用方法 (2)???[Test]31NUnit2.0详细使用方法 (2)???public?void?ReadOneObject()32NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){33NUnit2.0详细使用方法 (2)??????//load?one?record?using?the?open?database?connection34NUnit2.0详细使用方法 (2)???}35NUnit2.0详细使用方法 (2)?36NUnit2.0详细使用方法 (2)???[Test]37NUnit2.0详细使用方法 (2)???public?void?ReadManyObjects()38NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){39NUnit2.0详细使用方法 (2)??????//load?many?records?using?the?open?database?connection40NUnit2.0详细使用方法 (2)???}41NUnit2.0详细使用方法 (2)}42NUnit2.0详细使用方法 (2)43NUnit2.0详细使用方法 (2)
Test Suite?? Test Suite是test case或其他test suite的集合. 合成(Composite),模式描述了test case和test suite之间的关系. ?参考来自NUnit的关于Suite的代码 Suite Attribute ?1NUnit2.0详细使用方法 (2)namespace?NUnit.Tests
?2NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2){
?3NUnit2.0详细使用方法 (2)using?System;
?4NUnit2.0详细使用方法 (2)??using?NUnit.Framework;
?5NUnit2.0详细使用方法 (2)?
?6NUnit2.0详细使用方法 (2)
?7NUnit2.0详细使用方法 (2)
?8NUnit2.0详细使用方法 (2)??public?class?AllTests
?9NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)??NUnit2.0详细使用方法 (2){
10NUnit2.0详细使用方法 (2)????[Suite]
11NUnit2.0详细使用方法 (2)????public?static?TestSuite?Suite
12NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????NUnit2.0详细使用方法 (2){
13NUnit2.0详细使用方法 (2)??????get
14NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)??????NUnit2.0详细使用方法 (2){
15NUnit2.0详细使用方法 (2)????????TestSuite?suite?=?new?TestSuite("All?Tests");
16NUnit2.0详细使用方法 (2)????????suite.Add(new?OneTestCase());
17NUnit2.0详细使用方法 (2)????????suite.Add(new?Assemblies.AssemblyTests());
18NUnit2.0详细使用方法 (2)????????suite.Add(new?AssertionTest());
19NUnit2.0详细使用方法 (2)????????return?suite;
20NUnit2.0详细使用方法 (2)??????}
21NUnit2.0详细使用方法 (2)????}
22NUnit2.0详细使用方法 (2)??}
23NUnit2.0详细使用方法 (2)}?
24NUnit2.0详细使用方法 (2) Category属性 ?对于测试来说,你有的时候需要将之分类,此属性正好就是用来解决这个问题的。 ?你可以选择你需要运行的测试类目录,也可以选择除了这些目录之外的测试都可以运行。在命令行环境里 /include 和/exclude来实现。在GUI环境下,就更简单了,选择左边工作域里的Catagories Tab,选择Add和Remove既可以了。 在上面的例子上做了一些改善,代码如下:
?1NUnit2.0详细使用方法 (2)using?System;??2NUnit2.0详细使用方法 (2)using?NUnit.Framework;??3NUnit2.0详细使用方法 (2)???4NUnit2.0详细使用方法 (2)namespace?NUnitQuickStart??5NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2){??6NUnit2.0详细使用方法 (2)????????????[TestFixture]??7NUnit2.0详细使用方法 (2)????????????public?class?NumersFixture??8NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????????????NUnit2.0详细使用方法 (2){??9NUnit2.0详细使用方法 (2)????????????????????????private?int?a;?10NUnit2.0详细使用方法 (2)????????????????????????private?int?b;?11NUnit2.0详细使用方法 (2)????????????????????????[SetUp]?12NUnit2.0详细使用方法 (2)????????????????????????public??void?InitializeOperands()?13NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????????????????????????NUnit2.0详细使用方法 (2){?14NUnit2.0详细使用方法 (2)????????????????????????????????????a?=?1;?15NUnit2.0详细使用方法 (2)????????????????????????????????????b?=?2;?16NUnit2.0详细使用方法 (2)????????????????????????}?17NUnit2.0详细使用方法 (2)??18NUnit2.0详细使用方法 (2)????????????????????????[Test]?19NUnit2.0详细使用方法 (2)????????????????????????[Category("Numbers")]?20NUnit2.0详细使用方法 (2)????????????????????????public?void?AddTwoNumbers()?21NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????????????????????????NUnit2.0详细使用方法 (2){?22NUnit2.0详细使用方法 (2)????????????????????????????????????int?sum=a+b;?23NUnit2.0详细使用方法 (2)????????????????????????????????????Assert.AreEqual(sum,3);?24NUnit2.0详细使用方法 (2)????????????????????????}?25NUnit2.0详细使用方法 (2)????????????????????????26NUnit2.0详细使用方法 (2)????????????????????????[Test]?27NUnit2.0详细使用方法 (2)????????????????[Category("Exception")]?28NUnit2.0详细使用方法 (2)????????????????????????[ExpectedException(typeof(DivideByZeroException))]?29NUnit2.0详细使用方法 (2)????????????????????????public?void?DivideByZero()?30NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????????????????????????NUnit2.0详细使用方法 (2){?31NUnit2.0详细使用方法 (2)????????????????????????????????????int?zero?=?0;?32NUnit2.0详细使用方法 (2)????????????????????????????????????int?infinity?=?a/zero;?33NUnit2.0详细使用方法 (2)????????????????????????????????????Assert.Fail("Should?have?gotten?an?exception");?34NUnit2.0详细使用方法 (2)????????????????????????}?35NUnit2.0详细使用方法 (2)????????????????????????[Test]?36NUnit2.0详细使用方法 (2)????????????????????????[Ignore("Multiplication?is?ignored")]?37NUnit2.0详细使用方法 (2)????????????????????????[Category("Numbers")]?38NUnit2.0详细使用方法 (2)????????????????????????public?void?MultiplyTwoNumbers()?39NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????????????????????????NUnit2.0详细使用方法 (2){?40NUnit2.0详细使用方法 (2)????????????????????????????????????int?product?=?a?*?b;?41NUnit2.0详细使用方法 (2)????????????????????????????????????Assert.AreEqual(2,?product);?42NUnit2.0详细使用方法 (2)????????????????????????}?43NUnit2.0详细使用方法 (2)??44NUnit2.0详细使用方法 (2)???????????????}?45NUnit2.0详细使用方法 (2)??????? NUnit-GUI界面如图5-2:
 NUnit2.0详细使用方法 (2)
图5-2:使用Catagories属性的界面
Explicit属性 本属性忽略一个test和test fixture,直到它们显式的选择执行。如果test和test fixture在执行的过程中被发现,就忽略他们。所以,这样一来进度条显示为黄色,因为有test或test fixture忽略了。?例如:???1NUnit2.0详细使用方法 (2)
?2NUnit2.0详细使用方法 (2)????????????????????????[Test,Explicit]?
?3NUnit2.0详细使用方法 (2)????????????????????????[Category("Exception")]?
?4NUnit2.0详细使用方法 (2)????????????????????????[ExpectedException(typeof(DivideByZeroException))]?
?5NUnit2.0详细使用方法 (2)????????????????????????public?void?DivideByZero()?
?6NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)????????????????????????NUnit2.0详细使用方法 (2){?
?7NUnit2.0详细使用方法 (2)????????????????????????????????????int?zero?=?0;?
?8NUnit2.0详细使用方法 (2)????????????????????????????????????int?infinity?=?a/zero;?
?9NUnit2.0详细使用方法 (2)????????????????????????????????????Assert.Fail("Should?have?gotten?an?exception");?
10NUnit2.0详细使用方法 (2)????????????????????????}
11NUnit2.0详细使用方法 (2) ????为什么会设计成这样呢?原因是Ingore属性忽略了某个test或test fixture,那么他们你再想调用执行是不可能的。那么万一有一天我想调用被忽略的test或test fixture怎么办,就用Explicit属性了。我想这就是其中的原因吧。Expected Exception属性 ? 期望在运行时抛出一个期望的异常,如果是,则测试通过,否则不通过。参看下面的例子:?1NUnit2.0详细使用方法 (2)[Test]?
?2NUnit2.0详细使用方法 (2)[ExpectedException(typeofInvalidOperationException))]?
?3NUnit2.0详细使用方法 (2)public?void?ExpectAnException()?
?4NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)?NUnit2.0详细使用方法 (2){?
?5NUnit2.0详细使用方法 (2)???int?zero?=?0;?
?6NUnit2.0详细使用方法 (2)???int?infinity?=?a/zero;?
?7NUnit2.0详细使用方法 (2)???Assert.Fail("Should?have?gotten?an?exception");?
?8NUnit2.0详细使用方法 (2)???????????????????????
?9NUnit2.0详细使用方法 (2)?}?
10NUnit2.0详细使用方法 (2) ??? 在本测试中,应该抛出DivideByZeroException,但是期望的是InvalidOperationException,所以不能通过。如果我们将[ExpectedException(typeof(InvalidOperationException))]改为[ExpectedException(typeof(DivideByZeroException))],本测试通过。 5 . 测试生命周期合约 ?? 如果记得test case的定义,其中一个属性是测试的独立性或隔离性.SetUp/TearDown方法提供达到测试隔离性的目的.SetUp确保共享的资源在每个测试运行前正确初始化,TearDown确保没有运行测试产生的遗留副作用. TestFixtureSetUp/TestFixtureTearDown同样提供相同的目的,但是却在test fixture范围里,我们刚才描述的内容组成了测试框架的运行时容器(test runner)和你写的测试之间的生命周期合约(life-cycle contract). ?? 为了描述这个合约,我们写一个简单的测试来说明什么方法调用了,怎么合适调用的.这里是代码:
?1NUnit2.0详细使用方法 (2)using?System;?2NUnit2.0详细使用方法 (2)using?NUnit.Framework;?3NUnit2.0详细使用方法 (2)[TestFixture]?4NUnit2.0详细使用方法 (2)public?class?LifeCycleContractFixture?5NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2){?6NUnit2.0详细使用方法 (2)???[TestFixtureSetUp]?7NUnit2.0详细使用方法 (2)???public?void?FixtureSetUp()?8NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){?9NUnit2.0详细使用方法 (2)??????Console.Out.WriteLine("FixtureSetUp");10NUnit2.0详细使用方法 (2)???}11NUnit2.0详细使用方法 (2)?12NUnit2.0详细使用方法 (2)???[TestFixtureTearDown]13NUnit2.0详细使用方法 (2)???public?void?FixtureTearDown()14NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){15NUnit2.0详细使用方法 (2)??????Console.Out.WriteLine("FixtureTearDown");16NUnit2.0详细使用方法 (2)???}17NUnit2.0详细使用方法 (2)???18NUnit2.0详细使用方法 (2)???[SetUp]19NUnit2.0详细使用方法 (2)???public?void?SetUp()20NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){21NUnit2.0详细使用方法 (2)??????Console.Out.WriteLine("SetUp");22NUnit2.0详细使用方法 (2)???}23NUnit2.0详细使用方法 (2)24NUnit2.0详细使用方法 (2)???[TearDown]25NUnit2.0详细使用方法 (2)???public?void?TearDown()26NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){27NUnit2.0详细使用方法 (2)??????Console.Out.WriteLine("TearDown");28NUnit2.0详细使用方法 (2)???}29NUnit2.0详细使用方法 (2)?30NUnit2.0详细使用方法 (2)???[Test]31NUnit2.0详细使用方法 (2)???public?void?Test1()32NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){33NUnit2.0详细使用方法 (2)??????Console.Out.WriteLine("Test?1");34NUnit2.0详细使用方法 (2)???}35NUnit2.0详细使用方法 (2)36NUnit2.0详细使用方法 (2)???[Test]37NUnit2.0详细使用方法 (2)???public?void?Test2()38NUnit2.0详细使用方法 (2)NUnit2.0详细使用方法 (2)???NUnit2.0详细使用方法 (2){39NUnit2.0详细使用方法 (2)??????Console.Out.WriteLine("Test?2");40NUnit2.0详细使用方法 (2)???}41NUnit2.0详细使用方法 (2)42NUnit2.0详细使用方法 (2)}43NUnit2.0详细使用方法 (2)44NUnit2.0详细使用方法 (2)
当编译和运行这个测试,可以在System.Console窗口看到下面的输出:
NUnit2.0详细使用方法 (2)FixtureSetUpNUnit2.0详细使用方法 (2)SetUpNUnit2.0详细使用方法 (2)Test?1

热点排行