首页 > 其他分享 >使用NUnit做单元测试(总结版)

使用NUnit做单元测试(总结版)

时间:2022-11-28 12:07:32浏览次数:65  
标签:总结 NUnit 单元测试 class 指令 测试 public


使用NUnit做单元测试(总结版)




一、本文摘要:

 ●什么单元测试
 ●什么是NUnit
 ●NUnit的下载以及安装
 ●NUnit的启动
 ●NUnit的最简单使用
 ●验证设计的功能是否实现
 ●SetUp/TearDown 属性
 ●TestFixtureSetUp/TestFixtureTearDown
 ●Category属性
 ●Explicit属性
 ●输出

二、什么单元测试

单元测试,就是局部测试,对于web应用程序或者Windows应用程序来说,都是由很多“局部”组成的。如果是一个具体的Web Page,那么可以通常运行、浏览页面看到具体的结果,但是如果是一个类,测试起来可能就会有一些麻烦,尤其是在类反复继承之后,想要查看程序运行过程中某个类的具体实现结果和实现过程,往往就不那么容易了。
vs IDE当中包含调试(Debug)和跟踪(Trace)的功能,但是它们也有一些局限,往往都是要对程序的整体进行测试,通过层层调用才能运行到某个类。
所以使用单元测试对局部进行测试就会有更好的结果了。
使用单元测试可以很轻松的实现:

静态类测试
静态方法测试
类的实例化测试
类的方法测试

三、什么是NUnit?

单元测试通过有两种办法:一个是微软在VS提供的单元测试,另一个是NUnit,前者可能更复杂也更全面(我只实践过一次,发现复杂是肯定有的),后者更简洁明了。

四、NUnit的下载以及安装

和普通的软件没有什么区别,略。
下载地址:​​​http://www.nunit.org/​

五、NUnit的启动

有两种方法,一个是单独启动(通过开始菜单快捷方式),这个时候需要指定已经编译好的dll路径;另一个是集成在VS中启动。

后者适合单独开发类库的时候使用,否则,在一个解决方案中既有类库,也有Web应用程序,还得反复切换“启动项目”。

单独启动的时候,指定好已经编译的DLL,按下"RUN"按钮,测试成功就会以绿色方式显示,失败就会显示红色,黄的部分则是通过Category指令跳过。

六、最简单使用

◆在项目(库类)中添加NUnit的引用。

NUnit.Framework 有针对 .net framwork 1.1和2.0两个版本,引用的时候需要注意

◆新建一个类

需要说明的是
i)NUnit通过创建这个类的实例,和运行这个实例的方法来完成测试。它和原始的、想测试的目标类,并不相同。假如写好一个类classA,想要对classA进行测试,那么现在新建的这个类就是Test_For_ClassA
ii)为了便于叙述,文中使用命名约定:“原始类”和“测试类”

◆并且使用Using指令把"NUnit.Framework;"命名空间包含进来

注意大小写,在添加引用的时候是全小写的,但是命名空间却不是。

◆在类名称前面加上指令:[TestFixtureSetUp],这个类必须是public

◆添加一个public void 方法,在这个方法前面加上 [Test]指令。后文管这种方法叫做“测试方法”

◆ Shift+F6或者F6生成

◆通过开始菜单快捷方式启动NUnit

◆通过“文件”菜单》“打开”,浏览并找到刚才生成的dll

◆按下Run按钮,NUnit显示绿色的进度条,表明测试成功。

以上就是NUnit的最简单使用,这里其实什么也没有测试,只是演练一下NUnit这个单元测试工具的使用。下面进一步介绍NUnit的使用方法。

七、验证设计的功能是否实现

7.1基本的测试

◆例如:类的实例化

新建一个测试类,添加一个“测试方法”,在这个方法中添加原始类的实例化代码,这时候可以使用各种构造函数,例如(这里使用范例代码不能运行):

class a  = new class();
class b = new class("abc");

使用NUnit测试。如果“测试方法”测试通过显示绿色的进度条,那就证明类的构造函数通过了测试。

◆例如:类的void方法

在“测试方法”中实例化原始类,然后再运运行相应的方法,例如(这里使用范例代码不能运行):

class a = new class();

a.go();

7.2详细测试:断言

以上的测试都是简单的验证原始类的某些代码运行过程中是否出现异常。对于复杂的类来说,这些远远不够,对于原始类的属性和有返回值的方法可以使用NUnit提供的Assert(断言)来测试。例如:

原始类:

public class tag
{
    public int Count;
    public tag(string html)
    {
        prase(html);
    }
    public void prase(string str)
    {
 Count = 0;
        //中间包含具体的解析代码,解析过程中统计标签的数量,略
        return ;
    }
}

测试类:

[TestFixture]
public class TestTag
{

    [Test]
    public void T1()
    {
        tag t = new tag("<i>abc</i>");
        Assert.AreEqual(1, t.Count);
    }
}

NUnit在测试的时候,就会比较t.Count是否和1相等,相等则通过测试,并且通过绿色表示出来。
需要说明的是,Assert.AreEqual只是针对值类型判断是否相等。其它的断言,请查看中文帮助:​​​http://www.36sign.com/nunit/assertions.html​

还有一些情况不能通过异常和或者断言来判断,那么有两个选择:
A 自己在测试类当中写私有的类业判断

B 在控制台中输出相关的信息。

 

 

八、SetUp/TearDown 指令

简单说,就是多个测试中包含的“重合”的代码,可以放到[SetUp]指令指导定的代码当中。每个[Test]方法都会在运行之前先运行[SetUp]运行结束再运行[TearDown]。

九、TestFixtureSetUp/TestFixtureTearDown 指令

这一组指令和前面的指令类似,但是又有些不同,主要的区别在于,这一组指令通常用来打开、释放某些共同的资源(例如数据库连接)

十、Category指令

跳过的测试

十一、Explicit指令

在7.1中是验证代码能否正常运行,如果不出现异常那么就通过测试了。在这里Explicit指令是故意验证,代码当中会不会出现某一具体的异常。

 

十二、输出

根据测试的需要,可以在NUnit测试的过程种在控制台输出测试类中指定的信息。

能过在NUnit工具的“Text Output”选项卡可以看到测试过程中输出的信息。

例如:

        [TestFixtureSetUp]
        public void Init()
        {
             Console.WriteLine("开始测试并且初始化。");
        }

 


标签:总结,NUnit,单元测试,class,指令,测试,public
From: https://blog.51cto.com/u_15834343/5890805

相关文章

  • 关于final关键字的一些总结
    final关键字主要用在三个地方:变量、方法、类。1.对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便......
  • 计算机网络总结
    1、tcp如何保证可靠性 1.连接管理连接管理机制即TCP建立连接时的三次握手和断开连接时的四次挥手。2.校验和 TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首......
  • cv学习总结(11.21-11.27)
     本周彻底完成了CNN的全部内容,包括CNN的原理,代码实现等。CNN是一种神经网络的framework,跟connected_layer相比,更加侧重于能够保持原来的空间结构不变;我们输入的图片......
  • 网络编程及数据库MySQL总结
    目录网络编程并发知识网络编程知识网络编程软件开发架构计算机网络的相关专业名词OSI七层协议物理连接层数据链路层网络层传输层应用层socket模块黏包现象struct模块并发编......
  • 38-42本周总结
    目录本周总结多进程实现TCP服务端并发线程理论创建线程的两种方法线程的诸多特性GIL全局解释器锁验证GIL的存在GIL与普通互斥锁python多线程是否有用死锁现象信号量event事......
  • 2022-2023-1 20221316《计算机基础与程序设计》第十三周学习总结
    作业信息<班级的链接>首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园<作业要求的链接>:https://www.cnblogs.com/rocedu/p/9577842.h......
  • 2022-2023-1 20221311 《计算机基础与程序设计》第十三周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08作业目标:作业目标:《C语言程序设计》第12......
  • 2022-2023-1学期 20221417 《计算机基础与程序设计》第13周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第十三......
  • 2022-2023-1 20221328《计算机基础与程序设计》第十三周学习总结
    作业信息班级:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)作业要求:2022-2023-1《计算机基础与程序设计》教学进程......
  • 2022-2023-1 20221321 《计算机基础与程序设计》第十一周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13这......