.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 都需要完整启动一次项目,白白浪费宝贵的 ...
随机推荐
- SecureCRT 6.7.1 注冊机 和谐 破解 补丁 方法
之前一直在用SecureCRT 6.5.3 版本号,和谐补丁也好找,甚至中文版本号也可找到(眼下仅仅找到了SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各 ...
- iOS Dev (59) 高度自适应的UITextView
iOS Dev (59) 高度自适应的UITextView 作者:阿锐 地址:http://blog.csdn.net/prevention - 例如以下 _inputTextView 为一个 UIT ...
- SQL Server无法连接到(local)问题的解决的方法
今天在使用数据库的时候突然发现,SQL Server08竟然连接不上了.问题如图所看到的: 于是在网上搜索了一下这个问题,发现有非常多相似的提问,既然这个问题不是少数人遇到,看来这个问题还是值得研究一 ...
- 再见,CSDN
这是第三次的博客, 首先是从百度改变自己 从他的变化二CSDN 看看多年的积累, 真的不想,但CSDN搜电缆和编辑(新MarkDown更烂)实在不敢恭维 再见CSDN, 新的博客 http://my. ...
- HTML5 Canvas鼠标与键盘事件
演示HTML5 Canvas鼠标事件,获取Canvas对象上的鼠标坐标,演示键盘事件 通过键盘控制Canvas上对象移动. Canvas对象支持所有的JavaScript的鼠标事件,包括鼠标点击(Mo ...
- 重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画
原文:重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画 [源码下载] 重新想象 Windows 8 Store Apps (19) - 动画 ...
- 机械革命X5(MECHREVO MR-X5)开包检验
不废话.直接的问题,左右X5没有更具体的信息.为了通过有机会了解后续的选择,具体的数据被释放约: 首先看包装: 1.快递包裹,基于卖方这可以是不同的,包装各不相同 watermark/2/text/a ...
- Android 省市县 三级联动(android-wheel的使用)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...
- JavaScript概要
当用户填写表单在线,用户输入表单经常要推测在页面上,它提示用户填写正确的邮箱.哪些项目不填之类,这些都是JavaScript小的特点. JavaScript是一种基于对象的脚本语言,使用它能够开 ...
- sql系列(基础)-第二章 限制和排序数据
更好的看↑代码点击VIEW PLAN 第二章 约束和排序数据 1. 在 emp 表中选择工资介于 1500 到 2500 的员工的信息: 注意:使用 between 下边界 and 上边界时.条件包括 ...