.NET单元测试艺术(2) - 第一个单元测试
List 2.1 使用[SetUp]和[TearDown]特性
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; namespace AOUT.LogAn.Tests { [TestFixture] public class LogAnalyzerTests { private LogAnalyzer _analyzer = null; [SetUp] public void Setup() { _analyzer = new LogAnalyzer(); } [Test] public void IsValidLogFileName_ValidFileLowerCased_ReturnsTrue() { bool result = _analyzer.IsValidLogFileName(@"C:\Work\Microsoft\ArtOfUnitTesting\whatever.slf"); Assert.IsTrue(result, "filename should be valid!"); } [Test] public void IsValidLogFileName_ValidFileUpperCased_ReturnsTrue() { bool result = _analyzer.IsValidLogFileName(@"C:\Work\Microsoft\ArtOfUnitTesting\whatever.SLF"); Assert.IsTrue(result, "filename should be valid!"); } [TearDown] public void TearDown() { _analyzer = null; } } }
List 2.2 我们希望测试的LogAnalyzer文件名验证逻辑
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace AOUT.LogAn { public class LogAnalyzer { public bool IsValidLogFileName(string fileName) { if (!File.Exists(fileName)) { throw new Exception("No log file with that name exists"); } if (!fileName.ToLower().EndsWith(".slf")) { return false; } return true; } } }
List 2.3 通过调用IsValidLogFileName来测试属性的值
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace AOUT.LogAn { public class LogAnalyzer { private bool _wasLastFileNameValid; public bool WasLastFileNameValid { get { return _wasLastFileNameValid; } set { _wasLastFileNameValid = value; } } public bool IsValidLogFileName(string fileName) { if (!fileName.ToLower().EndsWith(".slf")) { _wasLastFileNameValid = false; return false; } // Save status for later valid _wasLastFileNameValid = true; return true; } } }
List 2.4 通过调用调用方法并检查其属性值来测试一个类
[Test] public void IsValidLogFileName_ValidName_RemembersTrue() { LogAnalyzer log = new LogAnalyzer(); log.IsValidLogFileName("somefile.slf"); Assert.IsTrue(log.WasLastFileNameValid); }
List 2.5 Add()方法和Sum()方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AOUT.LogAn { public class Calculator { ; public void Add(int number) { _sum += number; } public int Sum() { int temp = _sum; _sum = ; return temp; } } }
List 2.6 针对Calculator的Sum()方法的最简单测试
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; namespace AOUT.LogAn.Tests { public class CalculatorTests { [Test] public void Sum_NoAddCalls_DefaultsToZero() { Calculator calc = new Calculator(); int lastSum = calc.Sum(); Assert.AreEqual(, lastSum); } } }
List 2.7 两个测试,其中第二个调用了Add()方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; namespace AOUT.LogAn.Tests { public class CalculatorTests { private Calculator _calc = null; [SetUp] public void Setup() { _calc = new Calculator(); } [Test] public void Sum_NoAddCalls_DefaultsToZero() { int lastSum = _calc.Sum(); Assert.AreEqual(, lastSum); } [Test] public void Add_CalledOnce_SavesNumberForSum() { _calc.Add(); int lastSum = _calc.Sum(); Assert.AreEqual(, lastSum); } } }
.NET单元测试艺术(2) - 第一个单元测试的更多相关文章
- [Test] 单元测试艺术(1) 基础知识
单元测试不是软件开发的新概念,在1970年就一直存在,屡屡被证明是最理想的方法之一. 本系列将分成3节: 单元测试基础知识 打破依赖,使用模拟对象,桩对象,测试框架 创建优秀的单元测试 本节索引: 单 ...
- [Test] 单元测试艺术(2) 打破依赖,使用模拟对象,桩对象,隔离框架
在上节中,完成了第一个单元测试,研究了各种特性,在本节,将介绍一些更实际的例子.SUT依赖于一个不可操控的对象,最常见的例子是文件系统,线程,内存和时间等. 本系列将分成3节: 单元测试基础知识 打破 ...
- 单元测试系列之三:JUnit单元测试规范
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...
- <VS2017> 编写VC++单元测试 -(一)新建单元测试工程
开发人员自己编写单元测试是一个非常好的习惯.单元测试不但能够验证自己所编写的代码是否存在问题,避免提交给测试人员时才发现bug,也可以为将来改动代码的人提供验证代码功能正确性的途径.在我有限的工作生涯 ...
- .NET单元测试艺术(1) - 单元测试的基本知识
List 1.1 一个要测试的SimpleParser类 using System; namespace AOUT.CH1.Examples { public class SimpleParser { ...
- .NET单元测试艺术(3) - 使用桩对象接触依赖
List 3.1 抽取一个设计文件系统的类,并调用它 [Test] public bool IsValidLogFileName(string fileName) { FileExtensionMan ...
- 单元测试或main方法 进行单元测试时 idea检查其他类的语法是否正确的去除方法
在进行单元测试或者main方法时,在 运行/调试 设置中设置想要使用的测试单位的 before launch 即可
- linux内核设计的艺术--系统启动第一步
计算机究竟是如何执行起来的呢,在我学习计算机的时候一直不是非常明确,可是近期借了本<linux内核设计的艺术>算是知道了计算机从按开机到启动操作系统之间究竟做了些什么. 这本书刚開始介绍的 ...
- 【maven】【spring boot】【单元测试】 使用controller 执行单元测试类
存在这样一个场景: 当项目启动时间过长,又没办法缩短的时候,写单元测试就是一个十分耗时的工作, 这工作不在于使用编写代码,而在于每次run junit test 都需要完整启动一次项目,白白浪费宝贵的 ...
随机推荐
- php函数serialize()与unserialize() 数据序列化与反序列化
php函数serialize()与unserialize()说明及案例.想要将已序列化的字符串变回 PHP 的值,可使用unserialize().serialize()可处理除了resource之外 ...
- iOS游戏开发游戏功能之外的东西
对于一个游戏的开发,我们除了完毕游戏的功能之外,还有多少东西我们须要考虑呢? 非常多.也非常烦! 但做过一遍之后下一次就会非常easy. 都有什么东西我们想加入到游戏其中呢? (1)分享功能 (2)评 ...
- SQL Server :理解DCM页
原文:SQL Server :理解DCM页 我们已经讨论了各种不同的页,包括数据页.GAM与SGAM页.PFS页,还有IAM页.今天我们来看下差异变更页(Differential Change Map ...
- 关于产品的一些思考——腾讯之QQ音乐
--------------------2014.5.11-------------------- 原来一直使用小米手机自带的音乐播放器,除了搜歌下载不方便,其它的还好(省电是最大的长处),用过Jin ...
- Java / Android 基于Http的多线程下载的实现
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线程现在的例子,就帮忙实现了,在此分享下~ 先说下 ...
- Hibernate Tomcat JNDI数据源配置(转)
简述: 配置JNDI 查找Tomcat 中server.xml中定义的数据源 步骤: 1. 修改elipse的数据源server.xml 主要修改如下, 1. 添加下面这段Context文本 其中St ...
- 【Cocos2d-x】源代码分析之 2d/ui/Widget
从今天開始 咱也模仿 红孩儿这些大牛分析源代码 ,因为水平有限 不正确之处欢迎狂喷.哈哈. #ifndef __UIWIDGET_H__ #define __UIWIDGET_H__ #include ...
- Cordova探险系列(三)
自从3.0之后.Cordova默认是关闭全部关于设备原生特性功能的,所以我们要通过加入插件来启动原生特性. 这里以Accelerometer(加速度感应器)为例,来学习怎样使用设备原生特性. 1.加入 ...
- ORACLE Install (10g r2) FOR Red Hat Enterprise Linux Server release 5.5 (64 bit) (转)
OS Info----------# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 5.5 (Tikanga)# cat ...
- 理解和运用javascript中的call及apply
call是为了改变函数上下文context而存在的,换言之,就是改变函数内部this的指向.因为javascript存在[定义时上下文],[运行时上下文]及[上下文]是可以改变的.例如:var fun ...