快速业务通道

追求代码质量 - 亲身体验行为驱动开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
uo; 这个场景编写了 代码。

清单 25. 如果没有调用 push 就调用 peek,会怎样?

public  void shouldReturnNullOnPeekWithoutPush() throws Exception{   Ensure.that(stStack.peek(), m.is(null)); }

同样,不会感到意外。如清单 26 所示,问题出现了。

清单 26. 没有可执行的内容

1) StackBehavior should return  null on peek without push: java.lang.ArrayIndexOutOfBoundsException: -1

修复这个缺陷的逻辑类似于 pop() 的逻辑,如清单 27 所示。

清单 27. 这个 peek() 需要做一些修复

public E peek()  {   if(this.list.size() > 0){   return this.list.get(this.list.size()-1);   }else{   return null;   } }

把我对 Stack 类作出的所有修改和修复综合起来,可以得到清单 28 中的代 码。

清单 28. 一个可正常工作的栈

import  java.util.ArrayList; public class Stack<E> {   private ArrayList<E> list;   public Stack() {   this.list = new ArrayList<E>();   }   public void push(E value) {   if(value == null){    throw new RuntimeException("Can''t push null");   }else{    this.list.add(value);   }   }   public E pop() {   if(this.list.size() > 0){    return this.list.remove(this.list.size()-1);   }else{    throw new RuntimeException("Nothing to pop");   }   }   public E peek() {   if(this.list.size() > 0){    return this.list.get(this.list.size()-1);   }else{    return null;   }   } }

在此,StackBehavior 类运行 7 种行为,以确保 Stack 类能按照 Linda 的 (和我自己的一点)规范运行。Stack 类 还可能使用某种重构(也许 pop() 方 法 应该调用 peek() 进行测试,而不是执行 size() 检查?),但是由于一直 使用了行为驱动过程,我可以很自信地对代码作出更改。如果出现了问题,很快 就可以收到通知。

结束语

您可能已经注意到,本月对行为驱动开发(BDD)的探索中,Linda 实际上就 是客户。在这里,可以把 Frank 看作开发人员。如果把这里的领域(即数据结 构)换成其它领域(例如一个呼叫中心应用程序),以上应用仍然类似。作为客 户或领域专家的 Linda 指出系统、特性或应用程序应该 执行什么功能,像 Frank 这样的开发人员则使用 BDD 确保正确理解了她的要求并实现这些需求。

对于很多开发人员来说,从测试驱动开发转移到 BDD 是明智的转变。如果采 用 BDD,就不必考虑测试,而只需注意应用程序的需求,并确保应用程序的行为 执行它 应该 执行的功能,以满足那些需求。

在这个例子中,使用 BDD 和 JBehave 使我可以根据 Linda 的说明轻松地实 现一个可正常工作的栈。通过首先 考虑行为,我只需倾听她的需求,然后相应 地构建栈。在此过程中,我还发现了 Linda 没有提及的关于栈的其他内容。

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