快速业务通道

演化架构与紧急设计: 测试驱动设计,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
atic boolean isPerfect(int number) {      // get factors      List<Integer> factors = new  ArrayList<Integer>();      factors.add(1);      factors.add(number);      for (int i = 2; i < number; i++)        if (number % i == 0)          factors.add(i);      // sum factors      int sum = 0;      for (int n : factors)        sum += n;      // decide if it''s perfect      return sum - number == number;    } }

演化架构与紧急设计: 测试驱动设计,第1部分(3)

时间:2011-05-18 IBM Neal Ford

这并不是特别好的代码,但是它完成了工作。首先把所有因子创建为一张动态 列表(ArrayList)。我把 1 和目标数字添加到列表中(我在遵守上面给出的公 式,并且所有因子列表都包括 1 和该数字本身)。然后,我迭代可能的因子直到 该数字本身,逐个检查以查看它是不是一个因子。如果是,我将把它添加到列表 中。接下来,我将把所有因子加起来,并最终编写上面所示的公式的 Java 版本 以确定是否为完全数。

现在,我需要一个后测试的单元测试以确定它是否可以工作。我至少需要两个 测试:一个测试用于查看是否正确报告了完全数,另一个测试用于检查我没有得 到误判断(false positives)。单元测试位于清单 2 中:

清单 2. PerfectNumberFinder 的单元测试

public class  PerfectNumberFinderTest {    private static Integer[] PERFECT_NUMS = {6, 28, 496,  8128, 33550336};    @Test public void test_perfection() {      for (int i : PERFECT_NUMS)        assertTrue(PerfectNumberFinder1.isPerfect(i));    }    @Test public void test_non_perfection() {      List<Integer>expected = new  ArrayList<Integer>(          Arrays.asList(PERFECT_NUMS));      for (int i = 2; i < 100000; i++) {        if (expected.contains(i))          assertTrue(PerfectNumberFinder1.isPerfect(i));        else          assertFalse(PerfectNumberFinder1.isPerfect(i));      }    }    @Test public void test_perfection_for_2nd_version() {      for (int i : PERFECT_NUMS)        assertTrue(PerfectNumberFinder2.isPerfect(i));    }    @Test public void test_non_perfection_for_2nd_version()  {      List<Integer> expected = new  ArrayList<Integer>(Arrays.asList(PERFECT_NUMS));      for (int i = 2; i < 100000; i++) {        if (expected.contains(i))          assertTrue(PerfectNumberFinder2.isPerfect(i));        else          assertFalse(PerfectNumberFinder2.isPerfect(i));      }      assertTrue(PerfectNumberFinder2.isPerfect(PERFECT_NUMS [4]));    } }

演化架构与紧急设计: 测试驱动设计,第1部分(4)

时间:2011-05-18 IBM Neal Ford

测试名称中的 “_” 是怎么回事?

在编写单元测试时在方法名称中使用下划线是我的一个编程怪癖。当然,Java 标准中规定方法名称可以是大小写混合的。但是我一直保持测试方法名称不同于 普通方法名称。测试方法名称应当指出正在测试的是什么方法,因此这些名称是 很长的描述性名称,在测试失败时,您就知

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号