单元测试和测试驱动开发的一些常见问题总结
作者:网络转载 发布时间:[ 2014/7/1 14:28:30 ] 推荐标签:单元测试 测试驱动开发
如何使用Mock?
.NET Mock Framework有哪些,可以看看下面几个网页:
.NET Mocking Framework对比
What C# mocking framework to use?
The Fakes Framework in Visual Studio 2012
关于Mock框架的实现方式,大概有两种:基于动态代理实现;基于编译时静态织入实现。各个框架的用法看一下介绍很快可以掌握了,关键是如何使用各种mock技术,存在的争论主要有下面几个:
争论一:像Typemock、Moles、Visual Studio 2012 Fakes Framework这类静态织入技术的框架,可以支持对Sealed Class、Non-Abstract Method、Non-Virtual Method、Static Method的Mock。有些人觉得这很强大,有些人觉得这反倒不好,他们认为像Moq、Rhino Mocks这类的框架,正因为不支持前面说的四类情况的mock,强迫项目必须实现依赖倒置,从而降低了项目的耦合性,以达到较高的可测试性以及可维护性。
争论二:在使用动态代理方式的Mock框架时候,为了“可测试性”,protected方法必须是virtual的,因为我们需要在子类中进行override。同理,Mock框架能够辅助的方法也必须是virtual的,即使是一个public方法。那么,您觉得这是为了可测试性而做出的让步吗?或者换句话说,您觉得,一个不可以override的protected方法,但是会影响到其他公开接口的功能,这是不是一个合理的设计呢?如果这是一个合理的设计,又不想作出这样的让步……我们又该怎么做呢?(这段话摘自老赵的“与protected成员有关的单元测试方式”)
争论三:在使用动态代理方式的Mock框架时候,为了测试一些Non-Abstract Method、Non-Virtual Method、Static Method,提供一个被测方法/类的Wrapper,封装对无法直接访问方法的调用,是否合适?做法参考:
http://blog.zhaojie.me/2009/08/unit-test-protected-method.html#comment_iX2whQ8q04I003i2
http://blog.zhaojie.me/2009/08/unit-test-protected-method.html#comment_iX2whQ8q04I003hi
关于争论一,我的考虑的结果如下:
实际情况中,我会根据项目实际情况来选型。考虑的因素主要有:
是否需要支持私有方法、Non-virtual方法的单元测试:实际情况中,项目的代码结构不一定是想象中的理想情况,这个时候需要考虑Typemock、Visual Studio 2012 Fakes这类框架。
开发效率:能够花小的成本完成单元测试工作,获得大的收益。使用复杂,开发效率低的框架的优先级自然要排在后面。
集成难易程度:一般单元测试用例会在提交代码的时候跑一遍,作为保证提交代码质量的一道关卡。单元测试框架是否能和现有持续集成工具很好的集成在一块,也是要考虑的因素。
运行效率:跑的越快的框架,能够减少每次验证的时间成本。
什么是“测试驱动数据库开发”?
测试驱动数据库开发,也称为TDDD(Test-Driven Database Development),是把TDD的理念运用到数据库开发的过程中,通过数据库测试来定义数据库的行为,如同通过测试定义应用程序代码逻辑一样,来保证数据库重构过程中的质量。
使用 TDDD 的优点包括:
首先,所有TDD的优点都适用与TDDD ,你可以小步而安全的前进;
通过重构使系统在整个生命周期中保持高质量的设计;
回归测试让你能尽早发现缺陷;
TDDD促使你能时刻获得一个新的可执行的系统(而不像传统的设计文档)。
推荐感兴趣的朋友看看伍斌老师翻译《测试驱动数据库开发——Test-Driven Database Development: Unlocking Agility》这本书:
目录结构:http://my.safaribooksonline.com/book/databases/database-design/9780132776486
伍斌老师的译者序:让数据库应用开发不再裸奔——Test-Driven Database Development译者序
样章试读:http://ptgmedia.pearsoncmg.com/images/9780321784124/samplepages/032178412X.pdf
原作者Max Guernsey的PPT:http://www.maxthe3rd.com/test-driven-database-development/TDD-Database.pdf
如何做测试驱动数据库开发?
由于这块研究不深,暂时列举一些数据库单元测试框架,未来如果研究更加深入了,再专门写文章介绍。
数据库单元测试的框架:
DbFit
tSQLt(Test Driven Database Development with tSQLt)
DbUnit
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11