NUnit的基本使用方式

通常的单元测试框架都以他们支持的语言的开头字母加上Unit作为名字,他们统称为xUnit框架。C++的叫做CppUnit,Java的叫做JUnit,.Net的叫做NUnit。当然不是所有的都这么命名,但大部分如此。下面我主要讲解一下NUni的一些基本操作。

1:Nunit两个重要属性

1.1:[TestFixture]

这个是标识包含自动化测试的类,可能改成TestClass大家更加理解。但是代码是无法编译过去的。

1.2:[Test]

这个是标识这个方法需要自动化测试的。记得把这个属性加在要测试的方法上。

2:编写第一个单元测试

2.1:一个单元测试通常包含三个行为:

2.1.1:准备对象(就是对哪个对象就行操作)

2.1.2:操作对象(对对象进行一些逻辑处理)

2.1.3:断言(Assert)和预判产生的结果对比

2.2:编写一个判断后缀名的方法

public bool IsValidExtensions(string fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentNullException("fileName");
            var extension = Path.GetExtension(fileName);
            if (extension.Contains("pdf"))
            {
                return true;
            }
            return false;
        }

2.3:编写测试方法

2.3.1:Assert这个类

Assert.IsFalse(bool condition, string message)

参数1:返回的结果  参数2:展示失败的信息

Assert.AreEqual(int expected, int actual, string message)

参数1:期望的结果  参数2:实际的结果 参数3:展示失败的信息

当然Assert很多方法可以自己去学习。

        [Test]
        public void IsValidExtensions_BadExtension_ReturnsFalse()
        {
            var arithmetic=new Arithmetic();
            bool restlt = arithmetic.IsValidExtensions("log.pdf");
            Assert.IsFalse(restlt,"没有返回正确值");
        }

2.3.2:编译项目然后打开Nunit,点击NUnit的File打开这个编译的dll文件然后如下图

2.3.3:我们要修改单元测试方法

右键点击上图的ArithmeticTest选择LoadFixture就会重新导入这个ArithmeticTest。ClearFixTure清理这个ArithmeticTest

2.4:使用参数重构测试

比喻上面我们的参数叫做log.pdf但是现在又要测试log.txt怎么办,如果说2个可以写,10个乃至100个呢不用担心NUnit给我们提供了两个特性

[TestCase]

ok我们来修改上面的单元测试代码

[TestCase("log.pdf")]
        [TestCase("log.txt")]
        public void IsValidExtensions_BadExtension_ReturnsFalse(string fileName)
        {
            var arithmetic=new Arithmetic();
            bool restlt = arithmetic.IsValidExtensions(fileName);
            Assert.IsFalse(restlt,"没有返回正确值");
        }

我们在运行NUnit看看效果:

看到效果了吧我们就出现了两个方法。这样一来是不是很简单。

但是有的又说我可不可以指定我预期的效果呢,很明显是可以的我们在此修改测试方法

[TestCase("log.pdf",true)]
        [TestCase("log.txt",false)]
        public void IsValidExtensions_BadExtension_ReturnsFalse(string fileName)
        {
            var arithmetic=new Arithmetic();
            bool restlt = arithmetic.IsValidExtensions(fileName);
            Assert.IsTrue(restlt,"没有返回预期的值");
        }

我们运行会发现这2个都能通过编译这里就不贴图了。

2.5:setup和teardown

setup特性以后表示每次运行这个测试类首先就会进入这个方法相当于我们常说的构造函数

teardown表示方法运行结束以后再运行这个方法,我们常说的析构函数

[setup]A()

[test]B()

[teardown]C()

运行顺序是A到B到C

2.6:异常检测

2.6.1:ExpectedException标识这种标识是很常见的一种测试异常的方法下面来看它的用法

public bool IsValidExtensions(string fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentNullException();
            var extension = Path.GetExtension(fileName);
            if (extension.Contains("pdf"))
            {
                return true;
            }
            return false;
        }

[Test]
        [ExpectedException(typeof(ArgumentNullException),ExpectedMessage = "值不能为 null。")]
        public void IsVaildFileName_EmptyFileName_ThrowException()
        {
            var arithmetic = new Arithmetic();
            arithmetic.IsValidExtensions("");
        }

第一个参数:表示显示异常的类

第二个参数:表示期望的异常

注意:这个异常并没有调用Assert因为ExpectedException本身带有判断。

我们看看测试结果:

表示异常和我们期待的一样,但是这有一个问题如果我们构造函数抛出一个异常测试同样会通过,所以就会导致测试出现了不真实性。(我测试过在构造函数抛出空异常同样测试通过)

那么就引进了另一个异常的测试方式Lambda表达式来改造一下

       [Test]
        public void IsVaildFileName_EmptyFileName_ThrowException() {
            var arithmetic = new Arithmetic();
            var ex = Assert.Catch<Exception>(() => arithmetic.IsValidExtensions(string.Empty));
            StringAssert.Contains("值不能为 null。", ex.Message);//可以不写值不能为Null也能通过测试
        }

这样就避免了上面的情况,只要是lambda表达式抛出异常就通过测试否则任何地方抛出异常都不能通过测试。

2.7:忽略测试

有时候有些代码不需要测试,但是你又把它迁入主项目那么你就可以考虑把他忽略掉(当然这种情况很少的)

    [Test]
        [Ignore("这个方法目前不用进行测试")]
        public void IsVaildFileName_BadExtension_ReturnFalse()
        {
            var arithmetic = new Arithmetic();
            Assert.IsTrue(arithmetic.IsValidExtensions("11"));
        }

测试效果:

黄色的就表示暂时不考虑测试的方法。

2.8:设置测试类别

在实际开发中可能我们很多测试,为了分开测试我们可以设置类别,也可以在测试中选择一些分类测试下面我们看看怎么实现的

[Test]
        [Category("后台单元测试")]
        public void IsVaildFileName_BadExtension_ReturnFalse()
        {
            var arithmetic = new Arithmetic();
            Assert.IsTrue(arithmetic.IsValidExtensions("11"));
        }

        [Test]
        [Category("前端单元测试")]
        public void IsVaildFileName_EmptyFileName_ThrowException() {
            var arithmetic = new Arithmetic();
            var ex = Assert.Catch<Exception>(() => arithmetic.IsValidExtensions(string.Empty));
            StringAssert.Contains("值不能为 null。", ex.Message);
        }

我们看看效果:

大家可以自己动手测试下,实际功能比这强大很多的。

2.9:测试类中某个属性没有返回值怎么办

这个比较简单我直接贴代码了。

public bool IsOnline { get; set; }

        public void IsValidExtensions(string fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName)) throw new ArgumentNullException();
            var extension = Path.GetExtension(fileName);
            if (!extension.Contains("pdf")) return;
            IsOnline = true;
        }
[Test]
        public void IsVaildFileName_BadExtension_ReturnFalse()
        {
            var arithmetic = new Arithmetic();
            arithmetic.IsValidExtensions("log.pdf");
            Assert.IsTrue(arithmetic.IsOnline);
        }

这个效果很明显是通过的。这样来验证类的一个属性(但是有一个依耐项)

以上参考单元测试的艺术

时间: 2024-11-05 11:49:31

NUnit的基本使用方式的相关文章

在.NET开发中的单元测试工具之——NUnit

NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和xUnit体系中的大多数的做法一样,仅仅是将Smalltalk或者Java版本转换而来,但是在.NET2.0之后它加入了一些特有的做法.NUnit的官方网站是:http://www.nunit.org/,目前的最新版本是:2.6.2. NUnit下载与安装 NUnit的每个版本都提供了两种形式的下载:

单元测试——NUnit工具安装及简单运用

下载NUnit.Moq框架地址: 1.下载解压后,得到NUnit-2.6.4文件夹,打开文件夹中的bin文件,如下图: 2.选中nunit.exe发送快捷方式到桌面,双击刚发到桌面上"nunit.exe-快捷方式"图标,进入Nunit工具运行界面,如图: 3如图,通过菜单中File的下拉列表中的"Open Project Ctrl+O"项,找到为测试而写的测试项目的.dll文件(.exe文件也可),添加到NUnit中. 4.下图便是加载后的展示.直接单价Run按钮,

单元测试 之 NUnit和RhinoMocks

在dotnet环境中,我们通常使用NUnit和RhinoMocks来编写单元测试. NUnit 简介 NUnit是.net平台上的一个单元测试框架,用来帮助开发人员方便的完成单元测试的编写.其主页为 http://www.nunit.org,目前最新版本为2.6.3. 可以通过以下链接来查看不同版本的使用文档 http://www.nunit.org/index.php?p=documentation Rhino Mocks简介 Rhino Mocks是一个模拟对象创建和管理框架.使用它,开发人

NHibernate+NUnit (VS2012+SQL Server2008) (转)

源博客:http://blog.csdn.net/jiajiayouba/article/details/9877875 首先,你要明白,NHibernate在.NET中的作用和Hibernate在JAVA中的作用一样:第二,他们都是开源的东东:第三,他们都是一种对象关系数据库映射框架.第三点要好好理解哦,"对象",.NET和java都是面向对象的,通俗点就是里面都是各种class类:"关系数据库",MS SQL,ORACLE,etc,就是指的它们了:"映

Attribute操作的性能优化方式

Attribute是.NET平台上提供的一种元编程能力,可以通过标记的方式来修饰各种成员.无论是组件设计,语言之间互通,还是最普通的框架使用,现在已经都离不开Attribute了.迫于Attribute的功能的重要性(Kent Beck认为NUnit比早期JUnit设计的好,一个主要方面便是利用了Attribute),Java语言也在5.0版本中引入了与Attribute类似的Annotation概念.不过Attribute说到底也是一种反射操作,平时正常使用不会带来问题,但是密集的调用还是对性

[c#.Net] NUnit Test 体验

NUit Test Adapter 安装,两种方式 第一种:从扩展和更新里搜索nunit,进行下载安装 第二种:在项目中右键,管理NuGet程序包,搜索nunit 打开窗口: 编写测试用例: TestFixtureAttribute标记类包含测试用例 类必须是public 必须有缺省的构造函数 构造函数没有副作用 TestAttribute标记测试类中的方法是测试用例 没有参数 不返回参数 必须是public 断言Assert OneTimeSetUpAttribute, OneTimeTear

单元测试工具NUnit的使用

  使用 NUnit 工具来进行单元测试 首先在要创建一个单元测试的项目,通常在原有的解决方案中添加新项目, 在弹出的项目类型中选择单元测试,项目的命名一般情况下与解决方案的名称相同后加UnitTest 然后在项目中添加一个单元测试的类, 类的名称与要测试的类的名字相同,也是后缀加UnitTest, 在单元测试项目中添加引用   NUnit.Framework.dll, 而后在单元测试的类的头部添加引用  using NUnit.Framework; 在测试类的上部添加特性  [TestFixt

实现VS2010整合NUnit进行单元测试(转载)

代码编写,单元测试必不可少,简单谈谈Nunit进行单元测试的使用方式: 1.下载安装NUnit(最新win版本为NUnit-2.6.4.msi) http://www.nunit.org/index.php?p=download 2.下载并安装VS的Visual Nunit 2010 插件  http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099 注:可通过VS的“视图”->“其他窗口”

单元测试之道(使用NUnit)

首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而 又忐忑的心情点击界面上的按钮,顿时你刚刚的轻松感烟消云散:系统无法正常工作,你想读的数据显示不出来,你想存的东西也送不到数据库……于是,你再次回 到IDE里,设断点.调试.一层一层跟踪,当你精疲力尽终于将数据送到数据库里,你又发现了其它问题,于是你继续设断点.调试.编译.调试…… 2.你狂躁地敲击着键盘和鼠标,咒骂着不断