文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络程序开发Java追逐代码质量: 决心采用 FIT
精品推荐
特别推荐
·实例讲解:Java中的SOAP技术
·Java语言出现的背景 影响及前景
·Java精华积累:初学者都应该搞懂的问题
·Java多媒体框架设计自动播放机实例详解
·如何有效防止Java程序源码被人偷窥?
·Cell插件在J2EE系统中的应用
·初学者想学Hibernate,初级基础教程
·Java语言实现支持视频点播的WEB服务器
·关于Java编程的中文问题的几条分析原则
·确保J2ME无线移动商业应用程序的安全性
热点TOP10
·JasperReport经验谈
·Java Reflection (JAVA反射)
·让数据更安全 保护SQL Server的十个步骤
·“老虎”来了 J2SE1.5新功能一览
·Visual Basic串口通讯调试方法
·一个经典的JAVA APPLET程序(二)
·Java学习从入门到精通(附FAQ)
·用Eclipse Visual Editor 开发SWT GUI
·一个初学者初识 Java 内部类
·中国农历二百年算法及年历程序分析一

追逐代码质量: 决心采用 FIT

日期:2008年6月11日 作者: 查看:[大字体 中字体 小字体]


  还没用 FIT?那就用 FIT!

  在 图 5 的 FIT 表格中有八行数据值。可能已经在 清单 7 中编写了前两行的 JUnit 代码,但是真的想编写整个测试吗?编写全部八行的测试或者在客户添加新规则时再添加新的测试,需要巨大的耐心。好消息就是,现在有了更容易的方法。不过,不是忽略测试 —— 而是用 FIT! 

  FIT 对于测试业务规则或涉及组合值的内容来说非常漂亮。更好的是,其他人可以完成在表格中定义这些组合的工作。但是,在为表格创建 FIT 装备之前,需要给 Money 类添加一个特殊方法。因为需要在 FIT 表格中代表当前货币值(例如,像 $100.00 这样的值),需要一种方法让 FIT 能够认识 Money 的实例。做这件事需要两步:首先,必须把 static parse 方法添加到定制数据类型,如清单 10 所示:


清单 10. 添加 parse 方法到 Money 类


 public static Money parse(String value){
   return new Money(Double.parseDouble(StringUtils.remove(value, '$')));
 }

  Money 类的 parse 方法接受一个 String 值(例如,FIT 从表格中取出的值)并返回配置正确的 Money 实例。在这个示例中,$ 字符被删除,剩下的 String 被转变成 double,这与 Money 中现有的构造函数匹配。

  不要忘记向 MoneyTest 类添加一些测试来来验证新添加的 parse 方法按预期要求工作。两个新测试如清单 11 所示:

 
  清单 11. 测试 Money 类的 parse 方法


 public void testParse() throws Exception{
   Money money = Money.parse("$10.00");
   assertEquals("$10.00", money.toString());
 }

 public void testEquals() throws Exception{
   Money money = Money.parse("$10.00");
   Money control = new Money(10.00);
   assertEquals(control, money);
}

  编写 FIT 装备

  现在可以编写第一个 FIT 装备了。实例成员和方法已经在表 1 和表 2 中列出,所以只需要把事情串在一起,添加一两个方法来处理定制类型:Money。为了在装备中处理特定类型,还需要添加另一个 parse 方法。这个方法的签名与前一个略有不同:这个方法是个对 Fixture 类进行覆盖的实例方法,这个类是 ColumnFixture 的双亲。

  请注意在清单 12 中,DiscountStructureFITparse 方法如何比较 class 类型。如果存在匹配,就调用 Money 的定制 parse 方法;否则,就调用父类(Fixture)的 parse 版本。

  清单 12 中剩下的代码是很简单的。对于图 5 所示的 FIT 表格中的每个数据行,都设置值并调用方法,然后 FIT 验证结果!例如,在 FIT 测试的第一次运行中,DiscountStructureFITlistPricePerCase 被设为 $10.00,numberOfCases 设为 10,isSeasonal 为 true。然后执行 DiscountStructureFITdiscountPrice,返回的值与 $100.00 比较,然后执行 discountAmount,返回的值与 $0.00 比较。


  清单 12. 用 FIT 进行的折扣测试


package org.acme.store.discount;

import org.acme.store.Money;
import org.acme.store.discount.engine.PricingEngine;
import org.acme.store.discount.engine.ProductType;
import org.acme.store.discount.engine.WholesaleOrder;
import fit.ColumnFixture;

public class DiscountStructureFIT extends ColumnFixture {

  public Money listPricePerCase;
  public int numberOfCases;
  public boolean isSeasonal;

  public Money discountPrice() throws Exception {
    WholesaleOrder order = this.doOrderCalculation();
    return order.getCalculatedPrice();
  }

  public Money discountAmount() throws Exception {
    WholesaleOrder order = this.doOrderCalculation();
    return order.getDiscountedDifference();
  }

 /**
  * required by FIT for specific types
  */
  public Object parse(String value, Class type) throws Exception {
    if (type == Money.class) {
      return Money.parse(value);
    } else {
      return super.parse(value, type);
    }
  }

  private WholesaleOrder doOrderCalculation() throws Exception {
    WholesaleOrder order = new WholesaleOrder();
    order.setNumberOfCases(numberOfCases);
    order.setPricePerCase(listPricePerCase);

    if (isSeasonal) {
      order.setProductType(ProductType.SEASONAL);
    } else {
      order.setProductType(ProductType.YEAR_ROUND);
    }

    PricingEngine.applyDiscount(order);
    return order;
  }
}


上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页 




上一篇:在组合模式中实现访问者(Visitor)模式

下一篇:采用敏捷方法进行用户界面开发
相关文章:
·qq空间皮肤背景代码:QQ空间不用Q币更换主页皮肤方法
·QQ空间免费换皮肤代码
·如何在QQ空间加入播放器代码
·免费领养QQ空间五级花最新技巧及代码放送
·提高生活质量的50个方法
·Windows XP 客户端的软件限制策略一
·最新MTV音乐空间代码
·QQ空间音乐代码
·是什么在影响CD与DVD光盘的质量?
·QQ空间植物代码
相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot