三、如何在实际项目中应用单元测试(.Net项目为例)
1、以NUnit为例,示范几个简单的例子
2、单元测试的核心技术
桩对象,是对系统中现有外部依赖的一个替代品,可人为控制
模拟对象,模仿外部依赖,属于一个伪对象,用于检验交互行为
隔离框架
NUnit标签介绍
[TestFixture],用于标识一个包含NUnit自动化测试的类
[TestCase],用于标识测试方法为一个参数化测试
[ExpectedException],用于标识被测试方法应该抛出异常
[Test],用于标识一个需要被调用的自动化测试
[SetUp],会在测试类中的每个测试运行之前执行
[TearDown],会在测试类中的每个测试运行之后执行
[TestFixtureSetUp],会在测试类中的所有测试运行之前执行
[TestFixtureTearDown],会在测试类中的所有测试运行之后执行
Assert类,用于证明某个假设是否成立
Assert.IsTure(),用于验证结果是否为true
Assert.IsFalse(),用于验证结果是否为false
Assert.AreEqual(),用于验证期望的对象是否与实际一样
Assert.AreSame (),用于验证两个参数引用是否为同一个对象
解除外部依赖的技巧
抽取接口,以允许替换底层实现
在被测类中注入中注入伪对象的实现
注入伪对象的几种方法
构造函数注入
属性注入
方法参数(参数注入)
工厂类注入
局部工厂方法注入(不讲)
抽取和重写注入
属性注入、参数注入和构造函数注入基本一致,只是注入的位置不一样。属性注入通过注入桩对象,参数注入通过方法的参数注入桩对象,下面看看工厂类注入
上面的例子,讲的都是桩对象的注入,其实模拟对象的注入跟桩对象是一样的,关键是要弄清楚桩对象和模拟对象的区别
桩对象的目的是解除外部依赖,为被测方法传入一个可控制的对象,让测试可以进行
模拟对象的目的是测试方法是否向外界发送了信息,检验交互行为,所以单元测试检验的对象不再是被测方法,而是模拟对象
隔离框架,用于快速生成桩对象和模拟对象,减少开发人员的负担,常用的隔离框架有Rhion Mocks、Moq等等
原文转自:http://www.cnblogs.com/jialege/p/3601184.html