在 Symbian S60 平台进行单元测试
2010-03-16 17:18:00 来源:WEB开发网* 引用覆盖
* 判定覆盖
* 条件覆盖
* 多条件覆盖
* 条件/判定覆盖
* 修正条件/判定覆盖
* 路径覆盖
每一种覆盖方式都有其利弊,BullseyeCoverage解释了条件和判定覆盖,及它们不存在特定方式缺陷的简易的优势。更多有关覆盖方法和测试技术,更多查看[9], [10], [11], 和 [14]。
● 使用存根和伪对象
Martin Fowler的"伪对象不是存根"[15],是阐述存根和伪对象差别的很好地文章。它们共有的特点是测试对象所依赖的依赖性被给于执行反馈的应用性所取代,并提供从测试执行中转换运行环境的可能性。Fowler 从以下方式定义了伪对象:
Mock Objects术语已成为一种流行的说法,它描述了测试用的模拟实对象的特殊实例对象。如今许多语言环境都有其自己的框架,这使得我们很容易创建伪对象。尽管如此,最不常被我们意识到的是伪对象只是一个特殊的测试对象实例,是一种不同形式的测试。
附录A的示例代码使用的函数,把所有的可执行文件记录到一个巨集_LOGF的文件里。这个巨集可被更改用来往动态的缓冲器里写结果。然后测试实例可以执行测试接着在缓冲器里以正确的指令校验某些被(用正确的存储内容)调用的函数。这种被动的运用替换被称为存根(stub)。
当存根函数的语义能被动态地(从测试实例中)更改时,这种运用更趋向于被叫做伪对象(mock)。当单元测试达到高覆盖时,实际的做法是对每个类都进行伪对象(mock)操作。因为实类常相互参考,测试实例可选择用哪个例子替换伪对象或是在哪里使用具体对象。
jMock是一个Java 语言的资料库,它支持带有伪对象(mock)的java代码的测试驱动开发。这项实践是非常有趣的,但用c++ 的实现一些应用是很困难的,因为所有的东西都需要从头开始。"Mock Roles, Not Objects" [17] 一文是非常值得阅读理解伪对象(mock)相关的内容。
其他的技术和工具
复习查看一下代码手册是对付软件本地bug最有效的方法。两人合作是另一种方法,两种处理问题的方式会让bug无地自容。
另外有一些可供扫描代码报告错误或代码中不合理之处的工具,包括:
* LeaveScan (Carbide C++ 1.2随机附带工具)
* CodeScanner
* SymScan
* PC-lint http://www.gimpel-online.com/OnlineTesting.html
更多精彩
赞助商链接