WEB开发网
开发学院软件开发Java 追求代码质量: 亲身体验行为驱动开发 阅读

追求代码质量: 亲身体验行为驱动开发

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 清单 1 中定义的方法都是以应该开头,它们都创建一个人类可读的句子,追求代码质量: 亲身体验行为驱动开发(3),这里产生的 StackBehavior 类描述 Frank 和 Linda 之间的对话中提到的栈的很多特性,例如,在清单 3 中,我确保了如果对 null 调用 push(),Lind

清单 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); 
  } 
 }); 
} 

杰出的 expectation 和 override

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

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

Tags:追求 代码 质量

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接