快速业务通道

JUnit反模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
惰。而是您没有受过测试方面的训练,还因为您将专用开发时间都消耗在了编程技巧上,而不是消耗在测试能力上。该怎么办呢?JUnit 可让测试变得简单易行。

JUnit反模式(2)

时间:2011-02-04 Alex Garrett

反模式

本部分将介绍几个反模式,其中的错误现象是我们经常遇到的或易犯的。

愉快路径测试

愉快路径测试 可以验证被测系统的行为是否为所期望的行为。它们遵循每个正确的执行路径。在功能测试中,愉快路径与实际用例相同或相近。在单元测试中,它与实际用例相同或更小,因为单元服从于“单一职责原则”,您是测试它的单一职责。

实际上,愉快路径测试并不是一个反模式。反模式是指在进行愉快路径测试时开发程序的停止行为。愉快路径不测试系统的错误部分(不愉快路径)。编写代码时,通常考虑使用愉快路径进行编写。甚至在头脑中用一些愉快路径数据对它进行测试。边界条件将等待未测试的、范围之外数据,允许它们将您的应用程序带到其管辖范围之内。

假设您正在编写一个包含方法 eval 的 Factorial 类,该方法携带 int 并返回该 int 的阶乘。一个愉快路径测试会确认 Factorial.eval(3) 返回的是 6。此代码的实现不正确,但它仍返回正确的结果(误报),这种几率非常小:

public class Factorial {    public int eval(int _num) {      if (_num == 1) { return 1; }      return _num * eval(_num - 1);    } }

有些人会对此测试感到满意并继续操作,但是,请考虑下面这个实现:

public class Factorial {    public int eval(int _num) {      return 6;    } }

出现误报(false positive)会怎样呢?如果您从未接触过由测试驱动的开发(请参阅 参考资料),那么您可能也会认为人人都能编写如此头脑简单的实现。测试驱动的开发 (TDD) 中的一个练习就是首先编写测试,然后执行可能运行的最简单的操作 —— 如本例中的 return 6。

即使没有使用 TDD 方法执行操作,并在正确的实现中出现一个错误,您仍会得到误报。请考虑以下实现:

public class Factorial {    public int eval(int _num) {      if (_num == 1) { return 1; }      return _num + eval(_num - 1);    } }

除了数字的序列是相加的,而不是相乘的之外,这个算法与第一个算法几乎是相同的,对于值 3 和值 1(恰好出现这样一个值),返回的值是一样的,但是,对于其他任何值则会失败。关键是碰巧通过一个测试并不困难。

这就是为什么一定要进行两次以上的愉快路径测试。测试两次可以明显地减少一致通过的机率。尤其是测试值是 orthogonal (相互独立或没有关系)的情况下。例如,编写一个值为 3 和 5 的测试,将很就可以看出前面的两个实现是错误的。

确认测试和边界测试

还需要考虑其他两个测试类型:validity(或 domain)和 boundary。前者声明无效数据(或域外数据)的正确行为,后者是愉快路径测试的一种形式,但它声明实现在域的边界上可以正确地运行。

在这个示例中,请考虑在调用 Factorial.eval(-3) 时,将会发生什么情况。很有可能用尽堆栈空间,造成程序崩溃。当然 -3 不是一个有效的输入,所以使用它毫无意义。但是,在正确和错误之间还有一个中间方法,称为 IllegalArgumentException,演示如下:

public class Factorial {    public int eval(int _num) {      if (_num < 1) {        throw new IllegalArgumentException(          "Parameter must be greater than 0: " + _num);        }      if (_num == 1) { return 1; }      return _num * eval(_num - 1);    } }

编写了阶乘代码后,您可能发现该代码仍有错误

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号