如何进行压力测试使用Nunit进行测试

如何用nunit测试自己的接口
如何用nunit测试自己的接口
09-12-29 &匿名提问
   微软的DotNet开发绝对是属于那种入门容易提高难的技术。而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的。特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此RUP方法论也认同以架构为核心,体现4+1视图在整个软件开发过程中的重要作用。架构人员既要精通技术,又要熟悉业务,而且基本对软件生命周期各阶段的相关技术都需要有相关的积累和知识储备,而这些不经过多年的磨练是很难达到这个高度的。   要成为一个合格的架构师首先必须是一个合格或优秀的编码人员,对于开发来讲编码始终都是最重要的一项技能,在编码过程中只要自己善于去思考和分析问题,就可以多学到很多相关的知识和技术。所以我们在开发过程中一定要注意新知识和新技术的学习,前人经验和成果的学习。编码过程中应该去思考的一些问题有:1.在编码过程中自己是否做单元测试,是否使用相关工具做单元测试,如果没有的话是什么原因无法把单元测试做起来?2.自己编码的泄露率情况,编码泄露的BUG的原因分析3.是否有意识的对代码进行重构,重构过程中是否引入了相关设计模式的思想?4.是否对C#语言的一些高级特性进行学习,如反射调用,异步处理等。5.是否对Remoting和WebService两种分布式技术做过研究和对比分析?6.是否经常研究开源项目和开源代码,如Duwamish,PetShop,NUnit,Enterprise Library,Nant等7.是否对对象持久化机制和O/R Mapping等相关技术做过相关的研究8.平时在编码过程中是否注重公用组件和公用类的复用和抽取9.自己在平时工作和学习中是否经常开发些小工具提高工作效率,巩固学习知识   设计和编码其实是密切而不可分的,对于严格将设计和编码分开的瀑布模型一般也仅仅在大型项目中应用。而及时编码和设计分离,也不是将编码人员不需要思考,编码活动始终是一项创造性的劳动,如果否定这个观点那就代表编码过程完全不需要人员介入而可以完全自动化。因此在这里谈设计主要还是指设计人员的系统化思维能力,设计人员应该比开发人员站高一个层次来分析和思考问题。设计人员最重要的一个技能就是现实-&抽象的转换,而这个就需要谈到方法论的问题了,技术人员需要积累面对对象分析和设计或结构化分析知识的积累,需要有较强的数据库分析和设计能力。一个设计能否成为很好的架构师关键就在这种积累的深度和广度上面了。因此在设计过程中应该考虑的问题有:1.你现在分析和设计能力能否胜任大中型的应用系统还是只是独立功能分析和设计?2.设计过程中是否有意识的考虑到组件的复用和相关接口设计准则。是否能够很自然的将分析模式,设计模式的相关内容应用到自己的设计过程中。3.是否对XP,RUP,面向对象,结构化等方法论都有过较系统化的学习和思考。4.是否真正理解系统功能需求和非功能需求对系统设计的不同的指导作用。5.对自己设计的功能是否会根据后期的变更来反思自己的设计为何不能很好的适应变更?6.是否在设计过程中经常自己开发些原型来对自己的设计思路进行验证?7.是否专注技术的同时开始专业业务流程的分析,关注业务建模?   如果我们在设计和开发过程中经常关注这些知识和技能的话,成为一个合格的架构师是早晚的事情。平时能够胜任工作开发用到的知识和技能是微不足道的,如果自己不是有意识的去学习这些知识的话,那技能是很难得到进一步提高的。我参加过两次微软的架构师培训,在北京的微软架构峰会上也有机会专门参加了P&P Workshop的学习,培训老师是微软总部SmartClient Architecture and Design Guide一书的作者Edward A.Jezieski,让我感受最深是老外深刻的技术底蕴,对程序开发的执著。 对于DotNet架构经常用到的知识和技能储备有1.RUP方法论,4+1视图。用例驱动业务建模-&分析模型-&设计模型2.用例模式-&分析模式-&设计模式3.常用的分布式技术4.对安全,异常,日志,性能等非功能性需求的关注5.对应用系统整体业务的关注
请登录后再发表评论!Nunit单元测试工具
我的图书馆
Nunit单元测试工具
Assert.AreEqual(期望值, 实际值);&& //期望值与实际值相比较看是否相等,测试用
一 NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从 网站上免费获得,我下的是
win .net 2.0
..二 安装NUnit(很简单的,直接next就可以拉)三 新建console的c#的.net2005的project.里面包含要被测试的和测试程序. 记的要ref& unuit.framework .dll ,还有using NUnit.F 并build产成.exe.&
using&Susing&System.Collections.Gusing&System.Tusing&NUnit.Fnamespace&Nunit{&&&&class&Program&&&&{&&&&&&&&static&void&Main(string[]&args)&&&&&&&&{&&&&&&&&}&&&&}}namespace&NUnitCS{&&&&/**////&&summary&&&&&///&Book&的摘要说明。&&&&///&&/summary&&&&&public&class&Book&&&&{&&&&&&&&private&string&pid&=&null;&&&&&&&&private&string&pname&=&null;&&&&&&&&public&string&id&&&&&&&&{&&&&&&&&&&&&get&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return&&&&&&&&&&&&&}&&&&&&&&&&&&set&&&&&&&&&&&&{&&&&&&&&&&&&&&&&pid&=&&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&public&string&name&&&&&&&&{&&&&&&&&&&&&get&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return&&&&&&&&&&&&&}&&&&&&&&&&&&set&&&&&&&&&&&&{&&&&&&&&&&&&&&&&pname&=&&&&&&&&&&&&&}&&&&&&&&}&&&&}}namespace&NUnitCS{&&&&/**////&&summary&&&&&///&BookTest&的摘要说明。&&&&///&&/summary&&&&&[TestFixture]&&&&public&class&BookTest&&&&{&&&&&&&&Book&book&=&null;&&&&&&&&[TestFixtureSetUp]&&&&&&&&public&void&Init()&&&&&&&&{&&&&&&&&&&&&Console.WriteLine("测试开始!");&&&&&&&&&&&&book&=&new&Book();&&&&&&&&&&&&Console.WriteLine("book对象被初始化!");&&&&&&&&}&&&&&&&&[Test]&&&&&&&&public&void&testId()&&&&&&&&{&&&&&&&&&&&&book.id&=&"<span style="COLOR: #1";&//设置id属性的值为001&&&&&&&&&&&&//使用Assert查看id属性的值是否为001&&&&&&&&&&&&Assert.AreEqual("<span style="COLOR: #1",&book.id);&&&&&&&&&&&&Console.WriteLine("id属性被测试!");&&&&&&&&}&&&&&&&&[Test]&&&&&&&&public&void&testName()&&&&&&&&{&&&&&&&&&&&&book.name&=&"ASP";&//设置name属性的值为ASP&&&&&&&&&&&&//使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试&&&&&&&&&&&&Assert.AreEqual("JSP",&book.name);&&&&&&&&&&&&Console.WriteLine("name属性被测试!");&&&&&&&&}&&&&&&&&[TestFixtureTearDown]&&&&&&&&public&void&Dispose()&&&&&&&&{&&&&&&&&&&&&Console.WriteLine("book对象将被清理!");&&&&&&&&&&&&book&=&null;&&&&&&&&&&&&Console.WriteLine("测试结束!");&&&&&&&&}&&&&}}
四 测试用例这里只用了一个类进行测试,名为BookTest,以前这样的类可能需要继承NUnit.Framework.TestCase类,但现在只需要对该类使用TestFixture属性进行标识即可,而无须继承了。BookTest类包含两个用例,分别对应该类的testId和testName方法,即每个方法实现了一个测试用例。注意,在NUnit中,这些用来实现测试用例的方法有两种手段进行标识:一个是以testXXX的格式来命名,一个是使用Test属性进行标识。此外,BookTest还有Init和Dispose这两个方法,并分别使用TestFixtureSetUp和TestFixtureTearDown属性来进行标识,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。注意,这两个方法的名称并没有什么限制,但必须用TestFixtureSetUp和TestFixtureTearDown属性进行标识。下面开始编写BookTest。上例中的测试用例booktest中,这里Init和Dispose方法没什么好说的,就是执行了对book对象的初始化和清理,不过testId和testName需要说明一下。前者是在对bo的id属性进行测试,首先赋值为&#21;,然后使用Assert的AreEqual方法查看id属性中存放的值是否是期待的值,由于我的期待值也是&#21;,所以执行后这个用例应该是成功的;后者则是对bo的name属性进行测试,也是首先赋值为&#8221;ASP&#8221;,然后使用Assert的AreEqual方法查看其值是否是期待的,由于我特意将期待值设定为根本不可能的&#8221;JSP&#8221;,因此这个用例执行后会出现一个错误。但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值,如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。  下面简单介绍一下上边用到的静态类NUnit.Framework.Assert。该类主要包含6个方法:  1.AreEqual()方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的Equals()方法类似;  2.IsFalse()和IsTrue()方法,用来查看变量是是否为false或true,如果IsFalse()查看的变量的值是false则测试成功,如果是true则失败,IsTrue()与之相反。  3.AreSame()方法,用来比较两个对象的引用是否相等,类似于通过&#8220;Is&#8221;或&#8220;==&#8221;比较两个对象;  4.IsNull()和IsNotNull()方法,用来查看对象是否为空和不为空。五 打开NUnit-Net-2.0 2.2.8.exe工具.file-&open.打开上面产生的exe.然后选择你要测试的方法,click thebutton "RUN".testId前的点依然是绿色,但testName前的点是红色,而且进度条显示为红条,这表明testName中存在错误。不过这个错误是预计之内的,如果不想看到,可以在vs03中将testName()方法中的&#8221;JSP&#8221;改成&#8221;ASP&#8221;,然后重新运行。此时无须重新启动NUnit,NUnit会自动加载重新编写好的文件。此时再运行BookTest,进度条已不是红色,而是绿色了。六 unuit.framework 的高级属性1 但除了TestFixture、TestFixtureSetUp、Test和TestFixtureTearDown这四个常用的属性外,NUnit还提供了ExpectedException、Ignore、Suite、Category和Explicit等属性用于测试。2、ExpectedException  ExpectedException属性用于测试是否会抛出指定的异常,若抛出则NUnit的状态条为绿色,反之为红色。  示例代码:  using S  using NUnit.F    namespace NUnitTest  {    [TestFixture]    public class Test1    {      [Test]      [ExpectedException(typeof(Exception))]      public void TestExpectedException()      {        string s = "";        if (s != "")          throw new Exception();      }    }  }  测试效果:状态条为红色。  具体说明:由于字符串s在初始化时已赋值为"",因此在判断"s != """时条件自然不会成立,这样就不会抛出异常,状态条当然也就不会为绿色了。如果想让状态条显示为绿色,将判断条件改为"s == """就可以了。3、Ignore  Ignore属性可以供类和方法使用,使用后类或方法在NUnit测试中会被忽略,也就是说,对于暂时不想运行的测试类或测试方法,可以通过Ignore属性将其忽略掉。  示例代码1:  [TestFixture]  [Ignore("class test ignore")]  public class Test2  {    [Test]    public void TestIgnore()    {}  }  示例代码2:  [TestFixture]  public class Test2  {    [Test]    [Ignore("function test ignore")]    public void TestIgnore()    {}  }  测试效果:两个示例被执行后状态条都会显示为黄色。但如果你在测试时选择的是Test2节点,就会发现示例一执行后,只有Test2节点前的圆点显示为黄色,状态条没有发生任何变化,而示例二则会将Test2和TestIgnore节点前的圆点都变成黄色,状态条也显示成黄色。这是由于前者忽略的是整个类的测试,而后者忽略的只是测试方法。4、Suite  根据NUnit文档的说明,Suite属性是用来标记返回类型为NUnit.Core.TestSuite的类属性成员的,该类属性成员所返回的对象会包含一组测试类,也就是说Suite属性其实是用来组织一组测试类的。那么组织这些测试类到TestSuite对象中有何用呢?其实在早期的NUint当中,提供有NUnit.TextUI.TestRunner类,该类有个Run方法,参数就是TestSuite对象,通过该方法可以在代码中调用NUnit环境,从而运行TestSuite对象中的测试类。不过现在NUnit似乎已经不再使用这种方式了,故此对于Suite属性这里不再介绍。5、Category  Category属性用于将测试类和测试方法分组,从而使测试类和测试方法可以分组进行测试。  示例代码1:  [TestFixture]  [Category("Class1")]  public class Test31  {    [Test]    public void Test()    {}  }    [TestFixture]  [Category("Class1")]  public class Test32  {    [Test]    public void Test()    {}  }    [TestFixture]  [Category("Class2")]  public class Test33  {    [Test]    public void Test()    {}  }    [TestFixture]  [Category("Class2")]  public class Test34  {    [Test]    public void Test()    {}  }  示例代码2:  [TestFixture]  public class Test3  {    [Test]    [Category("m1")]    public void Test11()    {}        [Test]    [Category("m1")]    public void Test12()    {}        [Test]    [Category("m2")]    public void Test21()    {}        [Test]    [Category("m2")]    public void Test22()    {}  }  测试效果:示例一中编写了四个类,被分为Class1和Class2两个组;示例二中编写了四个方法,被分成了m1和m2两个组。对于这种分组的测试,要想看出效果,在打开NUnit后,需要先在Categories选项卡中作出选择,如下图所示:
可以看到,所有的组默认都在上边的Available Categories列表框中,选中的组则通过Add按钮添加到下边的Selected Categories列表框中,NUnit允许选中多个。测试完成后对于不想要的组,还可以通过Remove按钮放回到上边。选好后,点击Run按钮,再选择Tests选项卡,效果如下图:
可以看到,只有与Class1编组对应的Test31和Test32这两个类被测试了。6、Explicit  Explicit属性与Ignore属性有些类似,也是用于对暂时不想运行的测试类或测试方法做忽略的。但与Ignore属性相比还有两点差别:一个是Explicit属性不需要说明信息,一个是使用Explicit属性做忽略的类或方法在NUnit中被选中后,将不再被忽略,而是进行测试。  示例代码1:  [TestFixture]  public class Test4  {    [Test, Explicit]    public void TestMethod()    {}  }  示例代码2:  [TestFixture, Explicit]  public class Test42  {    [Test]    public void TestMethod()    {}  }  测试效果:示例一所忽略的是方法,若不在NUnit中选中该方法,测试后该方法前的圆点为黄色,即在测试中被忽略,若选中了则在测试后显示为绿色或红色,这与测试的结果有关;示例二所忽略的是类,效果与示例一类似。附:
using&Susing&System.Collections.Gusing&System.Tusing&NUnit.Fnamespace&Nunit{&&&&class&Program&&&&{&&&&&&&&static&void&Main(string[]&args)&&&&&&&&{&&&&&&&&}&&&&}}namespace&NUnitCS{&&&&/**////&&summary&&&&&///&Book&的摘要说明。&&&&///&&/summary&&&&&public&class&Book&&&&{&&&&&&&&private&string&pid&=&null;&&&&&&&&private&string&pname&=&null;&&&&&&&&public&string&id&&&&&&&&{&&&&&&&&&&&&get&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return&&&&&&&&&&&&&}&&&&&&&&&&&&set&&&&&&&&&&&&{&&&&&&&&&&&&&&&&pid&=&&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&public&string&name&&&&&&&&{&&&&&&&&&&&&get&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return&&&&&&&&&&&&&}&&&&&&&&&&&&set&&&&&&&&&&&&{&&&&&&&&&&&&&&&&pname&=&&&&&&&&&&&&&}&&&&&&&&}&&&&}}namespace&NUnitCS{&&&&/**////&&summary&&&&&///&BookTest&的摘要说明。&&&&///&&/summary&&&&&[TestFixture]&&&&public&class&BookTest&&&&{&&&&&&&&Book&book&=&null;&&&&&&&&[TestFixtureSetUp]&&&&&&&&public&void&Init()&&&&&&&&{&&&&&&&&&&&&Console.WriteLine("测试开始!");&&&&&&&&&&&&book&=&new&Book();&&&&&&&&&&&&Console.WriteLine("book对象被初始化!");&&&&&&&&}&&&&&&&&[Test]&&&&&&&&public&void&testId()&&&&&&&&{&&&&&&&&&&&&book.id&=&"<span style="COLOR: #1";&//设置id属性的值为001&&&&&&&&&&&&//使用Assert查看id属性的值是否为001&&&&&&&&&&&&Assert.AreEqual("<span style="COLOR: #1",&book.id);&&&&&&&&&&&&Console.WriteLine("id属性被测试!");&&&&&&&&}&&&&&&&&[Test]&&&&&&&&public&void&testName()&&&&&&&&{&&&&&&&&&&&&book.name&=&"ASP";&//设置name属性的值为ASP&&&&&&&&&&&&//使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试&&&&&&&&&&&&Assert.AreEqual("JSP",&book.name);&&&&&&&&&&&&Console.WriteLine("name属性被测试!");&&&&&&&&}&&&&&&&&[TestFixtureTearDown]&&&&&&&&public&void&Dispose()&&&&&&&&{&&&&&&&&&&&&Console.WriteLine("book对象将被清理!");&&&&&&&&&&&&book&=&null;&&&&&&&&&&&&Console.WriteLine("测试结束!");&&&&&&&&}&&&&}}namespace&NUnitTest{&&&&[TestFixture]&&&&public&class&Test1&&&&{&&&&&&&&[Test]&&&&&&&&[ExpectedException(typeof(Exception))]&&&&&&&&public&void&TestExpectedException()&&&&&&&&{&&&&&&&&&&&&string&s&=&"";&&&&&&&&&&&&if&(s&!=&"")&&&&&&&&&&&&&&&&throw&new&Exception();&&&&&&&&}&&&&}&&&&[TestFixture]&&&&[Ignore("class&test&ignore")]&&&&public&class&Test21&&&&{&&&&&&&&[Test]&&&&&&&&public&void&TestIgnore()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&public&class&Test22&&&&{&&&&&&&&[Test]&&&&&&&&[Ignore("function&test&ignore")]&&&&&&&&public&void&TestIgnore()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&[Category("Class31")]&&&&public&class&Test31&&&&{&&&&&&&&[Test]&&&&&&&&public&void&Test()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&[Category("Class32")]&&&&public&class&Test32&&&&{&&&&&&&&[Test]&&&&&&&&public&void&Test()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&[Category("Class33")]&&&&public&class&Test33&&&&{&&&&&&&&[Test]&&&&&&&&public&void&Test()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&[Category("Class34")]&&&&public&class&Test34&&&&{&&&&&&&&[Test]&&&&&&&&public&void&Test()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&public&class&Test3&&&&{&&&&&&&&[Test]&&&&&&&&[Category("m1")]&&&&&&&&public&void&Test11()&&&&&&&&{&}&&&&&&&&[Test]&&&&&&&&[Category("m1")]&&&&&&&&public&void&Test12()&&&&&&&&{&}&&&&&&&&[Test]&&&&&&&&[Category("m2")]&&&&&&&&public&void&Test21()&&&&&&&&{&}&&&&&&&&[Test]&&&&&&&&[Category("m2")]&&&&&&&&public&void&Test22()&&&&&&&&{&}&&&&}&&&&[TestFixture]&&&&public&class&Test4&&&&{&&&&&&&&[Test,&Explicit]&&&&&&&&public&void&TestMethod()&&&&&&&&{&}&&&&}&&&&[TestFixture,&Explicit]&&&&public&class&Test42&&&&{&&&&&&&&[Test]&&&&&&&&public&void&TestMethod()&&&&&&&&{&}&&&&}}
错误为红色;&&&&&&&&&&&&&&&&&&&&&&& 正确为绿色;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 忽略为黄色;
TA的最新馆藏
喜欢该文的人也喜欢您所在的位置: &
使用NUnit进行单元测试
使用NUnit进行单元测试
清华大学出版社
《C#和.NET 3.0第一步》第29章讲解单元测试和重构等方面的技术。这一节说的是使用NUnit进行单元测试。
29.1.2& 使用NUnit进行单元测试
单元测试可以对每一个方法进行测试。单元测试安装完以后在其安装目录下有这个工具的源码,并且还有一些相关的使用例子及帮助文档。按照我们上面的安装路径,帮助文档在“C:\Program Files\NUnit 2.4.3\doc”目录下,NUnit工具本身源代码在“C:\Program Files\NUnit 2.4.3\src”目录下,各种语言使用Nuit的例子在“C:\Program Files\NUnit 2.4.3\src\samples”目录下。NUnit测试工具本身采用C#语言编写,并使用反射技术完成,你如果想了解反射更高一层的操作技术,阅读此工具源码是一种很好的途径。
假如我们要编写一个最简单的工作台应用程序的单元测试,首先要建立一个普通的工作台应用程序。如,我们建立名称为HelloWorld的工作台应用程序,并添加一个MyClass类,我们准备对MyClass里面的方法进行测试,项目如下(图29.3):
图29.3& 解决方案
要对此项目进行测试,你就必须对此项目添加NUnit引用。单击“引用”在右键菜单中选择“添加引用”并选择“nunit.framework”引用,如下(图29.4):
图29.4& 添加引用
添加引用后你就可以编写相关的测试代码了。我们打算测试MyClass类当中的方法,你还需要添加一个专门的测试类,这里添加一个名称为“TestMyClass”新类。由于MyClass类目前还是空无一个方法,我们给其添加一个方法,假设添加的方法就是求两个数的和,代码如下:
class MyClass{public int Add(int x, int y){return x +}}
此时你就可以在测试类中书写下面测试代码:
using NUnit.F[TestFixture]public class TestClass{[Test]public void TestAdd(){HelloWorld.MyClass myObj = new HelloWorld.MyClass();int r = myObj.Add(1,1);Assert.AreEqual(r,2);}}
上面这段就是一个完整的、典型的单元测试代码。它测试了MyClass类的Add方法,它给这个方法输入两个值进行计算,最后看看计算的结果是不是预期的结果。这里要注意单元测试的几个特征,首先你要引入单元测试的空间NUnit.Framework,然后你的测试类必须拥有TestFixture特性,测试方法必须拥有Test特性。在每一个Test特性的方法里面你就可以进行测试了,你可以测试一个或多个方法,测试的结果可以通过一系列NUnit自带的“中断”方法来判断。这里用的“中断”方法是“Assert.AreEqual”,它可以判断两个值是否相等。
测试方法写完,我们就可以运行这个测试了,要运行这个测试,你首先要将项目设置成类库,然后,运行NUnit。从操作系统开始菜单里面找到NUnit菜单,然后运行NUnit,如下图(图29.5):
图29.5& NUnit运行菜单
运行后会出现下面界面(图29.6):
图29.6& NUnit运行界面
这个界面就是NUnit的测试界面,要测试我们刚才编写的项目,你需要使用“File”菜单里的“Open”菜单打开上面项目生成的程序集“HelloWorld.dll”,打开后如下(图29.7):
图29.7& 测试界面
点击上面的Run按钮即可对项目进行测试,测试工具将逐个运行测试方法,如下(图29.8):
图29.8& 测试结果
图中左侧即为要测试的方法,是树形结构,其中树的根节点是你要测试的类,子节点是要测试的方法。运行测试后,如果该方法测试成功即为绿色,如果不成功是红色。测试工具的右侧窗口是测试窗口,包括测试按钮、测试进度条和测试信息输出窗口。如果某个方法测试失败那么会在测试信息窗口输出错误的信息。
另外,还有一种简单的方式对一个项目启动测试工具,首先你也需要将项目的编译类型改为类库,然后启动“项目”菜单中的“HelloWorld属性”设置,设置里面“调试”卡片的内容:将“启动操作”设置为“启动外部程序”并在“启动外部程序”后面的文本框里面填入要启动的程序路径,这里要启动的就是NUnit工具,它位于NUnit安装目录,名称为“nunit.exe”,如下图29.9所示:
图29.9 设置启动项目
使用这种方式,你设置好后直接点击F5运行项目,便会自动启动NUnit测试工具针对这个项目进行测试。一个简单的测试就是这样,复杂的测试你就加几个Test的方法即可。通常情况下一个项目的每一个方法都要经过单元测试,并且单元测试代码要和项目放在一起。单元测试代码通过“中断”方法来告诉测试工具测试是否成功,常用的“中断”方法如下:
Assert.AreEquel ( actual ,expected& [,string message ])&#61548;&Assert.IsTrue (object [,string message ])&#61548;&Assert.IsNull (object [,string message])&#61548;&Assert.Fail ( [ string message] )
其中AreEquel是判断两个值是否相等,如果不相等则测试失败。IsTrue是测试值是否为true,如果为true则测试成功;IsNull测试值是否为空(null),如果为空则测试成功;Fail不对值进行测试,它直接告诉测试工具测试失败;这几个方法中的message是可选的参数,可以通过这个这个参数自定义错误信息。这些方法的使用方式在NUnit自带的示例中会看到。我们打开“C:\Program Files\NUnit 2.4.3\src\samples”路径下的C#测试例子,你会看到该示例,代码并不复杂:
using Susing NUnit.F[TestFixture] public class SimpleCSharpTest{protected int fValue1;protected int fValue2;//SetUp特性表示初始化测试数据[SetUp] public void Init() {fValue1= 2;fValue2= 3;}[Test] public void Add() {double result= fValue1 + fValue2;//测试和是否为6,如果和是6表示测试失败Assert.AreEqual(6, result, "测试失败.");}[Test] public void DivideByZero() {int zero= 0;//如果方法中抛出异常自然表示测试失败int result= 8/}[Test] public void Equals() {// AreEqual方法可以接受的测试值Assert.AreEqual(12, 12, "Integer");Assert.AreEqual(12L, 12L, "Long");Assert.AreEqual('a', 'a', "Char");Assert.AreEqual((object)12, (object)12, "Integer Object Cast");Assert.AreEqual(12, 13, "Expected Failure (Integer)");}[Test][ExpectedException(typeof(InvalidOperationException))]public void ExpectAnException(){throw new InvalidCastException();}[Test][Ignore("ignored test")]public void IgnoredTest(){throw new Exception();}}
这个例子的运行结果如下(图29.10):
图29.10& 运行结果
在上面的代码中我们看到几个陌生的特性。首先是SetUp特性,该特性标注的方法只运行一次,用来初始化测试类的变量。默认情况下测试方法是并行的,谁也不干涉谁,也就是说如果你在某个测试方法里修改了测试类的成员数据,在另外一个测试方法里这个修改是无效的。如果要对测试的数据初始化只有放在SetUp标识的方法中,在实际应用中一般在这个方法中初始化数据库连接。另外的,ExpectedException特性用来指定一个合法的返回异常,如果测试方法抛出这个异常则认为测试成功,Ignore表示忽略这个测试方法,对这个测试方法不进行测试。
【责任编辑: TEL:(010)】&&&&&&
关于&&&&&&&&的更多文章
本书将帮助你理解和使用PostgreSQL这一开源数据库系统。你不仅会
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
讲师: 23人学习过讲师: 42人学习过讲师: 74人学习过
《DreamweaverCS5+ASP动态网站建设从入门到精通》第一
Kubernetes是由谷歌开源的Docker容器集群管理系统,为
这是一个数据爆发的时代,尤其是在互联网+的风口上,
本书是关于Spring 2.0的权威教程,是Java/Java EE开发者必备的参考书。本书详尽系统地介绍了Java EE的基础知识、Spring 2.0的各
51CTO旗下网站

我要回帖

更多关于 如何进行增压测试 的文章

 

随机推荐