ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:607.80KB ,
资源ID:6334605      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6334605.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一步一步学NUnit.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一步一步学NUnit.docx

1、一步一步学NUnit一步一步学NUnit单元测试基础知识单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。当编写项目的时刻,如果我们假设底层的代码是正确无误的,那么先是高层代码中使用了底层代码;然后这些高层代码又被更高层的代码所使用,如此往复。当

2、基本的底层代码不再可靠时,那么必需的改动就无法只局限在底层。虽然你可以修正底层的问题,但是这些对底层代码的修改必然会影响到高层代码。于是,一个对底层代码的修正,可能会导致对几乎所有代码的一连串改动,从而使修改越来越多,也越来越复杂。从而使整个项目也以失败告终。而单元测试的核心内涵:这个简单有效的技术就是为了令代码变得更加完美。NUnit介绍NUnit 是一个免费开源的产品,它提供了一套测试框架和一个测试运行程序(test runner)。注意:test tunner 知道如何寻找具有 TestFixture 属性的类和类中的 Test 方法。如何安装 NUnit在官网下载NUnit,当前最新的

3、版是2.4.8,我下的是NUnit-2.4.8-net-2.0.zip。NUnit第一个演示我们用Visual Studio 2008新建一个NUnit项目:为了便于演示,我们把默认的Program.cs改成Calculator.cs,在Calculator类里,我们实现简单的加减乘除四个方法。完整代码如下:using System;namespace NUnitTestpublic class Calculator/ / 加法/ / / / public int Add(int a,int b)return a + b;/ / 减法/ / / / public int Minus(int a

4、, int b)return a - b;/ / 乘法/ / / / public int Multiply(int a, int b)return a * b;/ / 除法/ / / / public int Divide(int a, int b)return a / b;static void Main(string args)Calculator cal = new Calculator();int result = cal.Add(2,3);Console.WriteLine(result);Console.ReadKey(true); 如果没有单元测试,我们普通的测试方法就像是Ma

5、in方法一样,这样的测试是一个很邪恶的测试方法,花时间且很难得到我们想要的结果。那么,我们应该如何来用NUnit做单元测试呢?我们再新建一个项目:为这个NUnitTestTest引用“NUnitTest项目”和“nunit.framewor类库”。我们再新建一个测试类,命名为“CalculatorTest.cs”。并键入如下代码:using System;using NUnit.Framework;using NUnitTest;namespace NUnitTestTestTestFixturepublic class CalculatorTestTestpublic void TestAd

6、d()Calculator cal = new Calculator();int expected = 5;int actual = cal.Add(2, 3);Assert.AreEqual(expected, actual); 这就是一个简单的单元测试方法了。首先我们使用using NUnit.Framework和using NUnitTest,因为接下来的代码需要用到这两个命名空间。在这里,我们要注意几点,NUnit测试用的类前面一定要加上TestFixture,以表示这是NUnit测试类;测试方法一定是public的,且没有返回值。这里的TestFixture和Test都是NUnit的

7、Attribute,下表给出了NUnit常用的Attribute: Assert.AreEqual是断言,在测试框架中,断言是单元测试的核心,我们在测试中要对其程序断言。如果某个断言失败,方法的调用不会返回值,并且会报告一个错误。如果一个测试包含多个断言,那些紧跟失败断言的那些断言都不会执行,因此每个测试方法最好只有一个断言。 NUnit.Framework.Assert有23个重载方法,大部分的情况它都有考虑到,当然,不排除需要自己写一个复杂的断言方法。上面的代码中,int expected = 5;是指我们期望程序执行的结果是5,int actual = cal.Add(2, 3);则执行

8、Calculator.Add方法得到实际的值。顺便说一下,CalculatorTest(类名)还有TestAdd(方法名)并不是一定要这样写,你可以自由的命名你的名称,不过为了让你的代码可读性更好,请遵循一个命名规范,这个规范可以是公司定的也可以是网上主流的命名规则。对Add()方法的单元测试代码已经完成了,接下来我们运行下载解压后文件夹中的nunit.exe,程序界面如图:打开对话File/Open Project.对话框,或者按Ctrl + O,把第二个单元测试项目NUnitTestTest生成的NUnitTestTest.dll加载进来:我们点右边的Run按钮执行单元测试:太棒了,绿色!

9、通过!Keep the bar green to keep the code clean.一个简单的单元测试过程就是这样的。我们再为除法写一个单元测试方法:Testpublic void TestDivide()Calculator cal = new Calculator();int expected = 5;int actual = cal.Divide(25, 5);Assert.AreEqual(expected, actual); 重新生成NUnitTestTest项目,NUnit会自动把TestDivide方法加进去。再点Run,通过测试。大家都知道除法中除数不能为0,如果这里除数

10、是0呢?会有什么样的结果?Testpublic void TestDivide()Calculator cal = new Calculator();int expected = 5;int actual = cal.Divide(25, 0);Assert.AreEqual(expected, actual); 生成项目并重新运行单元测试: 测试没有通过 “NUnitTestTest.CalculatorTest.TestDivide:System.DivideByZeroException : 试图除以零。”这时,我们要返回到Calculator类中修改Divide方法使之除数为0时返回其

11、它的值。NUnit第一个简单示例就先到这里,在NUnit的官网也有简单教程,大家可以看看。在单元测试中,我们在做正面的测试的同时也要做一些反面测试,这样才能让我们的代码更健壮。在Visual Studio 2008 中打开上一章的示例,Calculator类有4个最简单的方法:加、减、乘、除。CalculatorTest类中的四个方法是Calculator类四个方法的单元测试。TestFixturepublic class CalculatorTest.Testpublic void TestAdd().Calculator cal = new Calculator();int expecte

12、d = 5;int actual = cal.Add(2, 3);Assert.AreEqual(expected, actual);Testpublic void TestMinus().Calculator cal = new Calculator();int expected = 5;int actual = cal.Minus(10, 5);Assert.AreEqual(expected, actual);Testpublic void TestMultiply().Calculator cal = new Calculator();int expected = 5;int actu

13、al = cal.Multiply(1, 5);Assert.AreEqual(expected, actual);Testpublic void TestDivide().Calculator cal = new Calculator();int expected = 5;int actual = cal.Divide(25, 5);Assert.AreEqual(expected, actual); 这里一定要注意,TestAdd()、TestMinus()、TestMultiply()和TestDivide()方法没有任何关系,也就是说单元测试中,所有的测试方法都是独立的。各个方法之间没

14、有依赖性,删除任何一个单元测试方法,对其它的测试不会有任何影响。上一章中,我们已经介绍了TestFixture和Test,现在我们为这个类新增一个方法。SetUppublic void InitMethod()Console.WriteLine(Initialization method); 重新生成项目,再运行NUnit,选中CalculatorTest进行单元测试:切换到NUnit的Console.Out中,我们看到Initialization method出现了4次,如果只选中一个测试方法:我们看到,这时只出现一次的Initialization method。SetUp的意思就是指在运行

15、每个测试方法前执行它。相应的,有开始必然有结束,TearDown是指在每个测试方法结束后运行。我们再新增一个方法:TearDownpublic void FinalizeMethod()Console.WriteLine(Finalize method); 再来看运行NUnit的结果:知道了SetUp和TearDown后,我们就可以改写这个单元测试类了。请TestFixturepublic class CalculatorTest.private Calculator cal;private int a, b, expected, actual;SetUppublic void InitMet

16、hod().cal = new Calculator();a = 10;b = 2;Testpublic void TestAdd().expected = 12;actual = cal.Add(a, b);Assert.AreEqual(expected, actual);Testpublic void TestMinus().expected = 8;actual = cal.Minus(a, b);Assert.AreEqual(expected, actual);Testpublic void TestMultiply().expected = 20;actual = cal.Mul

17、tiply(a, b);Assert.AreEqual(expected, actual);Testpublic void TestDivide().expected = 5;actual = cal.Divide(a, b);Assert.AreEqual(expected, actual); 因为运行每个测试方法之前,都会运行InitMethod()方法,所以每次都会初始化使第一个操作数为10,第二个操作数为2。在SetUp中初始化了的资源,我们就可以在TearDown里销毁释放。这里也许有人会问,如果我的项目很大,每个测试方法都需要连接数据库,在每个方法执行的时候进行连接再释放,这样是不

18、是太耗资源太慢了,能不能在一个单元测试类实例化的时候就运行一个指定的方法呢?这是可以的。在NUnit中,我们使用TestFixtureSetUp和TestFixtureTearDown就可以实现这样的功能。TestFixtureSetUp是指在这个测试类的整个生命周期中,它在所有的测试方法之前运行一次,而TestFixtureTearDown是在所有的测试方法都结束时运行。这里要注意的,TestFixtureSetUp与构造函数是不一样的,它标识的方法迟于构造函数运行。我们再对这个测试类进行重构:TestFixturepublic class CalculatorTest.private Ca

19、lculator cal;private int a, b, expected, actual;public CalculatorTest().Console.WriteLine(执行构造函数);TestFixtureSetUppublic void InitClass().Console.WriteLine(执行TestFixtureSetUp);cal = new Calculator();a = 10;b = 2;TestFixtureTearDownpublic void FinalizeClass().Console.WriteLine(执行TestFixtureTearDown);

20、SetUppublic void InitMethod().Console.WriteLine(执行SetUp);TearDownpublic void FinalizeMethod().Console.WriteLine(执行TearDown);a = 10;b = 2;Testpublic void TestAdd().Console.WriteLine(TestAdd() Begin);expected = 12;actual = cal.Add(a, b);Assert.AreEqual(expected, actual);Console.WriteLine(TestAdd() End

21、);Testpublic void TestMinus().Console.WriteLine(TestMinus() Begin);expected = 8;actual = cal.Minus(a, b);Assert.AreEqual(expected, actual);Console.WriteLine(TestMinus() End);Testpublic void TestMultiply().Console.WriteLine(TestMultiply() Begin);expected = 20;actual = cal.Multiply(a, b);Assert.AreEqu

22、al(expected, actual);Console.WriteLine(TestMultiply() End);Testpublic void TestDivide().Console.WriteLine(TestDivide() Begin);expected = 5;actual = cal.Divide(a, b);Assert.AreEqual(expected, actual);Console.WriteLine(TestDivide() End); 在NUnit中,我们可以很清楚地看到这个类的执行顺序:假如我们的测试项目中有使用到数据库,就可以把数据库连接写在TestFixt

23、ureSetUp中,把释放的代码写在TestFixtureTearDown中。我相信现在大家对NUnit的这4个属性都应该有一个直观的认识了吧。都是4个很简单的属性,但是在使用中用处却是非常大的。接下来再为大家介绍几个常用的属性。现在的测试中,我们有4个测试方法,但是如果我们想让其中的一个测试方法不在NUnit中显示,怎么办呢?不是注释,大家不要想歪了,注释大家都知道。要想让一个测试方法不在NUnit中显示,也不运行,我们应该使用Ignore属性。看看把TestAdd()添加Ignore属性后会是什么样子:TestIgnorepublic void TestAdd()Console.Write

24、Line(TestAdd() Begin);expected = 12;actual = cal.Add(a, b);Assert.AreEqual(expected, actual);Console.WriteLine(TestAdd() End); 现在有了一个新的颜色了黄色。它是指被忽略的方法。当然,你在项目中出现最多的肯定是绿色。在NUnit中我们可以用Ignore的重载方法Ignore(忽略原因)来定义忽略原因。NUnit有一个与Ignore类似的属性Explicit,它是指只有在NUnit中被明确的指定时才运行,否则不运行。有点拗口,我们来看例子。改写TestMinus方法:Tes

25、t,Explicitpublic void TestMinus()Console.WriteLine(TestMinus() Begin);expected = 8;actual = cal.Minus(a, b);Assert.AreEqual(expected, actual);Console.WriteLine(TestMinus() End); 这里,Test,Explicit 和TestExplicit 是完全一样的。我们看它的截图:TestMinus是灰色的,运行的Cases有2个,一个被忽略。而当我们选中TestMinus时:这个测试运行了。再给大家介绍一个分类属性Category(string name),利用这个分类属性

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1