java

位置:IT落伍者 >> java >> 浏览文章

探索JUnit 4.4 新特性[6]


发布日期:2020年01月06日
 
探索JUnit 4.4 新特性[6]

TDD 的优点

使得开发人员对即将编写的软件任务具有更清晰的认识使得他们在思考如何编写代码之前先仔细思考如何设计软件 对测试开发人员所实现的代码提供了快速和自动化的支持 提供了一系列可以重用的回归测试用例(regression test case)这些测试用例可以用来检测未来添加的新代码是否改变了以前系统定义的行为(测试代码兼容性)

然而TDD 也同样具有一定的局限性对于开发人员来说只用一些具体有限的简单例子来表达程序的行为往往远远不够有很多代码行为可以很容易而且精确的用语言来描述却很难用一些简单的例子来表达清楚因为他们需要大量的甚至无限的具体例子才可以达到被描述清楚的目的而且有时有限的例子根本不能覆盖所有的代码行为

以下列出的代码行为反映了 TDD 的局限性

将十进制整数转换成罗马数字然后再将其转换回十进制数并保持原有的数值(需要大量的测试用例有限的测试数据可能测不出所实现的代码的错误) 对一个对象进行操作希望结果仍然等于原来的对象(需要考虑各种各样类型的对象) 在任何一个货币的 collection 中添加一个对象 dollar需要产生出另外一个新的与以前不同的 collection (需要考虑所有的 collection 类型的对象)

理论(Theory)的出现就是为了解决 TDD 这个问题 TDD 为组织规划开发流程提供了一个方法先用一些具体的例子(测试用例 test case)来描述系统代码的行为然后再将这些行为用代码语句进行概括性的总的陈述(代码实现 implementation)而 Theory 就是对传统的 TDD 进行一个延伸和扩展它使得开发人员从开始的定义测试用例的阶段就可以通过参数集(理论上是无限个参数)对代码行为进行概括性的总的陈述我们叫这些陈述为理论理论就是对那些需要无穷个测试用例才能正确描述的代码行为的概括性陈述结合理论(Theory)和测试一起可以轻松的描述代码的行为并发现 BUG 开发人员都知道他们代码所想要实现的概括性的总的目的理论使得他们只需要在一个地方就可以快速的指定这些目的而不要将这些目的翻译成大量的独立的测试用例

理论机制的优点

优点 理论(Theory)使得开发完全抽象的接口(Interface)更加容易

优点 理论仍然可以重用以前的测试用例因为以前的许多传统的具体的测试用例仍然可以被轻松的改写成理论(Theory)测试实例

优点 理论(Theory)可以测试出一些原本测试用例没测出来的 bugs 优点 理论允许配合自动化测试工具进行使用自动化工具通过大量的数据点来测试一个理论从而可以放大增强理论的效果利用自动化工具来分析代码找出可以证明理论错误的值

下面通过一个简单的例子来逐步介绍理论的优点

比如设计一个专门用来货币计算的计算器首先需要给代码行为编写测试用例(这里以英镑 Pound 的乘法为例)如清单 所示

清单 英镑 Pound 乘法的一个测试用例

@Test

public void multiplyPoundsByInteger() {

assertEquals( new Pound()times()getAmount() );

}

这时很自然的就会想到一个测试用例可能不够需要再多一个如清单 所示

[] [] [] [] [] [] [] []

               

上一篇:探索JUnit 4.4 新特性[7]

下一篇:探索JUnit 4.4 新特性[5]