快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
的实现驱动因素。

以 Frank 和 Linda 的 对话为基础,让我们看看 BDD 如何以 TDD 希望推广的方式驱动开发。

追求代码质量 - 亲身体验行为驱动开发(2)

时间:2010-12-12 IBM Andrew Glover

JBehave

JBehave 是用于 Java™ 平台的一个 BDD 框架, 源于 xUnit 范例。正如您所料,JBehave 强调应该 这个词,而不是测试。和 JUnit 一样,您可以在自己喜欢的 IDE 中,或者通过偏爱的构建平台(例如 Ant)运行 JBehave 类。

JBehave 允许以 JUnit 的方式创建行为类;但是,在 JBehave 中,不需要 扩展任何特定的基类,并且所有行为方法都需要以 should 而不是 test 开头, 如清单 1 所示。

清单 1. 用于栈的一个简单的行为类 public class StackBehavior {   public void  shouldThrowExceptionUponNullPush() throws Exception{}    public void shouldThrowExceptionUponPopWithoutPush() throws  Exception{}   public void shouldPopPushedValue() throws  Exception{}   public void shouldPopSecondPushedValueFirst()  throws Exception{}   public void  shouldLeaveValueOnStackAfterPeep() throws Exception{}  } 

清单 1 中定义的方法都是以应该开头,它们都创建一个人类可读的句子。这 里产生的 StackBehavior 类描述 Frank 和 Linda 之间的对话中提到的栈的很 多特性。

例如,Linda 说,如果用户试图将 null 放到栈上,那么栈应该 抛出一个异 常。查看 StackBehavior 类中的第一个行为方法:该方法的方法名为 shouldThrowExceptionUponNullPush()。其它方法的命名也遵从这一模式。这种 描述性命名模式(这并不是 JBehave 或 BDD 特有的)便于以人类可读的方式报 告失败行为,您很快就可以看到这一点。

说到 shouldThrowExceptionUponNullPush(),那么如何验证这个行为呢?似 乎 Stack 类首先需要有一个 push() 方法,这很容易定义。

清单 2. 用于探索行为的一个简单的栈定义

public class  Stack<E> {   public void push(E value) {} }

可以看到,我编写了一个最简单的栈,以便首先 添加必需的行为。正如 Linda 所说,行为很简单:如果有人对 null 值调用 push(),那么栈应该 抛出 一个异常。现在看看我在清单 3 中如何定义这个行为。

清单 3. 如果推出一个 null 值,则栈应该抛出一个异常

public  void shouldThrowExceptionUponNullPush() throws Exception{   final Stack<String> stStack = new Stack<String> ();   Ensure.throwsException(RuntimeException.class, new Block(){    public void run() throws Exception {    stStack.push(null);    }   }); }

追求代码质量 - 亲身体验行为驱动开发(3)

时间:2010-12-12 IBM Andrew Glover

杰出的 expectation 和 override

在清单 3 中发生的一些事情是 JBhave 特有的,所以要解释一下。首先,我 创建 Stack 类的一个实例,并将它限制为 String 类型(通过 Java 5 泛型) 。接下来,我使用 JBehave 的 异常框架 实际建模我所期望的行为。Ensure 类 类似于 JUnit 或 TestNG 的 Assert 类型;但是,它增加了一系列方法,提供 了更具可读性的 API(这常被称作文学编程)。在清单 3 中,我确保了如果对 null 调用 push(),则抛出一个 RuntimeException。

JBehave 还引入了一个 Block 类型,它是通过用所需的行为覆盖 run() 方 法来实现的。在内部,JBehave 确保期望的异常类型不被抛出(并因此被捕捉) ,而是生成一个故障状态。您可能还记得,在我前面关于 用 Google Web Toolkit 对 Ajax 进行单元测试 的文章中,也出现了类似的覆盖便利

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