读书笔记-单元测试艺术(二)-单元测试框架
一、说明
本次笔记所有的代码是在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
读书笔记-单元测试艺术(二)-单元测试框架相关推荐
- 《深入浅出DPDK》读书笔记(十二):DPDK虚拟化技术篇(半虚拟化Virtio)
Table of Contents 半虚拟化Virtio 132.Virtio使用场景 133.Virtio规范和原理 11.2.1 设备的配置 1. 设备的初始化 2. 设备的发现 3. 传统模式v ...
- Java读书笔记(4)-多线程(二)
Java读书笔记(4)-多线程(二) 2016-1-2 线程通信 传统的线程通信 Object类提供了wait(),notify()和notifyAll三个方法 适用情况:synchronized修饰 ...
- 《DAMA数据管理知识体系指南》读书笔记-第十二章(元数据管理)
目录 一.前言 二.内容结构 三.主要内容 1.引言 2.活动 3.工具 4.方法 5.实施指南 6.元数据治理 四.思考与总结 一.前言 本文是<DAMA数据管理知识体系指南>第12章的 ...
- Android群英传读书笔记——第十二章:Android 5.X新特性详解
第十二章目录 12.1 Android5.X UI设计初步 12.1.1 材料的形态模拟 12.1.2 更加真实的动画 12.1.3 大色块的使用 12.2 Material Design主题 12. ...
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理
内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核的内存管理必须要简洁而且高效. 主要内容: 内存的管理单元 获取内存的方法 ...
- 《大话无线通信》读书笔记——一、二章
个人读书笔记,由于是计算机出身,所以可能理解有误.欢迎指正.讨论. 内容不全,仅供快速了解与自身回忆. 第一章 无线信道中存在问题: 如何区分信号来自哪个手机:多址(不同频率).复用(不同时间) 手机 ...
- 单元测试系列二-单元测试规范(适用于Java)
技术选型 UT框架:JUnit (4.12) Mock框架:Mockito (1.10.19) 文件.类与方法命名规范 源文件目录 src/main/java UT文件目录 src/test/java ...
- (读书笔记).NET大局观-.NET框架类库概观
.NET框架类库概况 构建在.NET框架上所有的软件,都会用到通用语言进行时,即使基于最简单的CLR程序,也需要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务. .NET框架 ...
- 《linux内核设计与实现》读书笔记第一、二章
第一章 Linux内核简介 1.1 Unix的历史 1971年,Unix被移植到PDP-11型机中. 1973年,Unix操作系统用C语言改写--为Unix系统的广泛移植铺平了道路. 1977年, ...
最新文章
- muduo 与 boost asio 吞吐量对比
- 电影网网站优化-SEO篇
- java使用POI获取sheet、行数、列数
- .mod.c 是什么文件
- SVG-不是图片的图片
- php时间函数引入,PHP日期和时间函数的使用示例详解
- sqlserver查询语句实例
- 网站SEO优化中tilte与h1的区别、b与strong的区别、i与em的区别
- yzl的javascript学习笔记
- IgH详解五、从站扫描流程
- c# timer 销毁_.NET中Timer 如何正确地被Dispose
- 小米手机连接电脑(Mac)刷miui12开发版的操作指南
- C++描述 LeetCode 1768. 交替合并字符串
- android 应用克隆 详细信息,IT之家学院:如何将一台安卓手机中的应用“克隆”到另一台...
- 残留的Ramnit埋伏中国热门网站后台
- 面试官:递归是个什么东东?
- 内网ip 查 核心交换机 流量_华为交换机做端口流量统计
- 【数值分析】数值分析部分算法和代码
- DNS主从域名解析服务器
- android studio 自定义控件
热门文章
- couldn't connect to server 127.0.0.1:27017 src/mongo/
- 程序员究竟能干多少年?用数据说话!
- 代码对比工具,我就用这 6 个!
- 悲催的中国式项目开发
- 多人开发时Git下冲突的产生和解决
- Shell 变量的作用域
- TCP/IP网络中专有名词注解
- 触摸屏mtp文件转c语言,F28335与上位机(触摸屏)之间的通讯遵循modbus协议使用C语言编程...
- java 线程 状态 图_Java线程中的生命周期和状态控制图文详解
- 在win8上配置网站服务器,win8怎么配置web服务器地址