一、说明

本次笔记所有的代码是在VS2013下运行的,使用的nunit.framework.dll版本为3.2.1.0,Reshaper版本为8.2.3

1.xUnit测试框架

大部分单元测试框架的名字中,开头通常是一个字母(代表实现它们的编程语言),如针对Java的JUnit

二、一个完整的例子

1.程序结构

2.编写LogAnalyzer.cs

namespace LogAn
{public class LogAnalyzer{public bool IsValidLogFileName(string fileName){if (!fileName.EndsWith(".SLF")){return false;}else{return true;}}}
}

3.编写LogAnalyzerTest.cs

说明:

[TestFixture]加在一个类上,标识这个类是一个包含自动化NUnit测试的类

[Test]加在一个方法上,标识这个方法是一个需要调用的自动化测试

测试方法的命名规范,一般包含三个部分:[被测方法]_[场景]_[预期行为]

注意:

NUnit测试方法的返回类型必须是void类型,并且不接受任何参数

namespace Manulife.LogAn.UnitTests
{[TestFixture]public class LogAnalyzerTests{[Test]public void IsValidFileName_validFile_ReturnTrue(){//arrange(配置)LogAnalyzer analyzer = new LogAnalyzer();//act(操控)bool result = analyzer.IsValidLogFileName("whatever.slf");//assert(断言)Assert.IsTrue(result, "filename should be valid!");}}
}

4.运行所有测试查看结果

三、NUnit其他特性

[SetUp]会在每一次运行测试类中的一个测试方法之前都会执行setup方法

[TearDown]会在测试类中的每一个测试方法运行结束后,执行一次

[TestFixtureSetUp]运行在一个测试类中的所有测试运行之前设置状态

[TestFixtureTearDown]在测试运行结束后进行清理

重写测试类

namespace Manulife.LogAn.UnitTests
{[TestFixture]public class LogAnalyzerTests{private LogAnalyzer analyzer = null;[SetUp]public void SetUp(){analyzer = new LogAnalyzer();}[Test]public void IsValidFileName_validFileLowerCased_ReturnTrue(){//act(操控)bool result = analyzer.IsValidLogFileName("whatever.slf");//assert(断言)Assert.IsTrue(result, "filename should be valid!");}[Test]public void IsValidFileName_validFileUpperCased_ReturnTrue(){//act(操控)bool result = analyzer.IsValidLogFileName("whatever.SLF");//assert(断言)Assert.IsTrue(result, "filename should be valid!");}[TearDown]public void TearDown(){analyzer = null;}}
}

View Code

执行过程

四、验证预期的异常

1.修改LogAnalyzer.cs

namespace LogAn
{public class LogAnalyzer{public bool IsValidLogFileName(string fileName){if (string.IsNullOrEmpty(fileName)){throw new ArgumentException("No filename provided!");}if (!fileName.EndsWith(".SLF")){return false;}else{return true;}}}
}

View Code

2.测试类中添加以下

[Test]public void IsValidFileName_EmptyFileName_ThrowException(){Exception ex = Assert.Catch<Exception>(() => analyzer.IsValidLogFileName(string.Empty));StringAssert.Contains("No filename provided!", ex.Message);}

五、忽略测试

修改以下方法

[Test]
[Ignore("这个测试有问题")]
public void IsValidFileName_validFileLowerCased_ReturnTrue()
{//act(操控)bool result = analyzer.IsValidLogFileName("whatever.slf");//assert(断言)Assert.IsTrue(result, "filename should be valid!");
}

六、设置测试类别

修改以下方法

[Test][Category("运行快点测试")]public void IsValidFileName_validFileUpperCased_ReturnTrue(){//act(操控)bool result = analyzer.IsValidLogFileName("whatever.SLF");//assert(断言)Assert.IsTrue(result, "filename should be valid!");}

七、参数化重构单元测试

添加以下测试方法

[TestCase("somefile.slf")][TestCase("somefile.SLF")]public void IsValidFileName_ValidExtensions_ReturnsTrue(string fileName){bool result = analyzer.IsValidLogFileName(fileName);Assert.AreEqual(true,result);}

转载于:https://www.cnblogs.com/kimisme/p/5562127.html

读书笔记-单元测试艺术(二)-单元测试框架相关推荐

  1. 《深入浅出DPDK》读书笔记(十二):DPDK虚拟化技术篇(半虚拟化Virtio)

    Table of Contents 半虚拟化Virtio 132.Virtio使用场景 133.Virtio规范和原理 11.2.1 设备的配置 1. 设备的初始化 2. 设备的发现 3. 传统模式v ...

  2. Java读书笔记(4)-多线程(二)

    Java读书笔记(4)-多线程(二) 2016-1-2 线程通信 传统的线程通信 Object类提供了wait(),notify()和notifyAll三个方法 适用情况:synchronized修饰 ...

  3. 《DAMA数据管理知识体系指南》读书笔记-第十二章(元数据管理)

    目录 一.前言 二.内容结构 三.主要内容 1.引言 2.活动 3.工具 4.方法 5.实施指南 6.元数据治理 四.思考与总结 一.前言 本文是<DAMA数据管理知识体系指南>第12章的 ...

  4. Android群英传读书笔记——第十二章:Android 5.X新特性详解

    第十二章目录 12.1 Android5.X UI设计初步 12.1.1 材料的形态模拟 12.1.2 更加真实的动画 12.1.3 大色块的使用 12.2 Material Design主题 12. ...

  5. 《Linux内核设计与实现》读书笔记(十二)- 内存管理

    内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核的内存管理必须要简洁而且高效. 主要内容: 内存的管理单元 获取内存的方法 ...

  6. 《大话无线通信》读书笔记——一、二章

    个人读书笔记,由于是计算机出身,所以可能理解有误.欢迎指正.讨论. 内容不全,仅供快速了解与自身回忆. 第一章 无线信道中存在问题: 如何区分信号来自哪个手机:多址(不同频率).复用(不同时间) 手机 ...

  7. 单元测试系列二-单元测试规范(适用于Java)

    技术选型 UT框架:JUnit (4.12) Mock框架:Mockito (1.10.19) 文件.类与方法命名规范 源文件目录 src/main/java UT文件目录 src/test/java ...

  8. (读书笔记).NET大局观-.NET框架类库概观

    .NET框架类库概况 构建在.NET框架上所有的软件,都会用到通用语言进行时,即使基于最简单的CLR程序,也需要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务. .NET框架 ...

  9. 《linux内核设计与实现》读书笔记第一、二章

    第一章 Linux内核简介 1.1 Unix的历史 1971年,Unix被移植到PDP-11型机中.  1973年,Unix操作系统用C语言改写--为Unix系统的广泛移植铺平了道路.  1977年, ...

最新文章

  1. muduo 与 boost asio 吞吐量对比
  2. 电影网网站优化-SEO篇
  3. java使用POI获取sheet、行数、列数
  4. .mod.c 是什么文件
  5. SVG-不是图片的图片
  6. php时间函数引入,PHP日期和时间函数的使用示例详解
  7. sqlserver查询语句实例
  8. 网站SEO优化中tilte与h1的区别、b与strong的区别、i与em的区别
  9. yzl的javascript学习笔记
  10. IgH详解五、从站扫描流程
  11. c# timer 销毁_.NET中Timer 如何正确地被Dispose
  12. 小米手机连接电脑(Mac)刷miui12开发版的操作指南
  13. C++描述 LeetCode 1768. 交替合并字符串
  14. android 应用克隆 详细信息,IT之家学院:如何将一台安卓手机中的应用“克隆”到另一台...
  15. 残留的Ramnit埋伏中国热门网站后台
  16. 面试官:递归是个什么东东?
  17. 内网ip 查 核心交换机 流量_华为交换机做端口流量统计
  18. 【数值分析】数值分析部分算法和代码
  19. DNS主从域名解析服务器
  20. android studio 自定义控件

热门文章

  1. couldn't connect to server 127.0.0.1:27017 src/mongo/
  2. 程序员究竟能干多少年?用数据说话!
  3. 代码对比工具,我就用这 6 个!
  4. 悲催的中国式项目开发
  5. 多人开发时Git下冲突的产生和解决
  6. Shell 变量的作用域
  7. TCP/IP网络中专有名词注解
  8. 触摸屏mtp文件转c语言,F28335与上位机(触摸屏)之间的通讯遵循modbus协议使用C语言编程...
  9. java 线程 状态 图_Java线程中的生命周期和状态控制图文详解
  10. 在win8上配置网站服务器,win8怎么配置web服务器地址