重构 改善既有代码的设计 第二版 - Building Tests

THE VALUE OF SELF-TESTING CODE

程序员的大部分时间用于调试工作。

Classes should contain their own tests.
每工作一点就测试,才容易找到bug。
当然,意味着要编写很多额外的代码。
当需要增加一个功能的时候,我从编写测试开始。通过编写测试,我问自己需要做些什么。
编写测试代码,也让我专注于接口而不是实现。
我也有了一个明确的点-当测试工作时,说明我的工作完成了。

Test­Driven Development依赖于编写(失败)测试的短周期,编写代码以使test工作,重构以确保结果尽可能地clean。

SAMPLE CODE TO TEST

下面是一个生产计划的应用UI:
production plan

每个province都有demand和price。每个province有producers,其中每一个都能以一定的价格生产一定的数量。还显示了每个producer能获得的收入。
在底部,显示了生产不足(需求-产量),和该计划的利润。
用户可以编辑demand、price,每个producer的production和cost。只要修改一个,其他元素都要立即更新。

我关注软件的业务逻辑-计算利润和不足的类,而不是生成HTML的代码。
业务逻辑涉及两个类:一个代表producer、另一个代表整个province。

类Province:

constructor(doc) {
   
    this._name = doc.name;
    this._producers = [];
    this._totalProduction = 0;
    this._demand = doc.demand;
    this._price = doc.price;
    doc.producers.forEach(d => this.addProducer(new Producer(this, d)));
}

addProducer(arg) {
   
    this._producers.push(arg);
    this._totalProduction += arg.production;
}

此函数创建合适的JSON数据。可以用该函数的结果构造Province对象,来创建用于测试的实例Province。

function sampleProvinceData() {
   
    return {
   
        name: "Asia",
        producers: [
            {
   name: "Byzantium", cost: 10, production: 9},
            {
   name: "Attalia", cost: 12, production: 10},
            {
   name: "Sinope", cost: 10, production: 6},
        ],
        demand: 30,
        price: 20
    };
}

Province类有各种数据值的访问器:

get name() {
   return this._name;}
get producers() {
   return this._producers.slice();}
get totalProduction() {
   return this._totalProduction;}
set totalProduction(arg) {
   this._totalProduction = arg;}
get demand() {
   return this._demand;}
set demand(arg) {
   this._demand = parseInt(arg);}
get price() {
   return this._price
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一直很喜欢重构这本书,但是由于自己记性不太好,书看过之后其中的方法总是记不住,于是想如果有电子重构书就好了,工作中遇到重构的问题可以随时打开查阅。在网上搜索了许久,发现重构这本书有英文chm本的,而中文的电子书只有扫描的PDF本,用起来非常不方便。于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间制作了这样的一本中文的chm重构,希望对大家有所帮助,也算对中国软件业做出一点小小的贡献。 本书基本上是取自”重构”中文一书的内容,但格式上参照的是chm英文的格式,还有一些格式小修改,比如第一章的重构前后代码对比。因为时间匆促,个人能力有限,本书难免存在一些缺漏,如果大家发现有问题,随时可以给我发邮件,我会尽快更新错误的内容。 最后再次感谢几位大师 Martin Fowler、Kent Beck等,还有翻译的侯捷和熊节先生,为我们带来这么精彩的一本书。谢谢。 免责声明:本书仅供个人学习研究之用,不得用于任何商业目的,不得以任何方式修改本作品,基于此产生的法律责任本人不承担任何连带责任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值