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

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

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 为 Matcher 挑选 ‘M’关于 UsingMatchers 类型您可能注意到,清单 12 中的代码并不是很优雅,追求代码质量: 亲身体验行为驱动开发(7),清单 11 中的 m 确实有点影响代码的可读性(“ensure that pop's va

为 Matcher 挑选 ‘M’

关于 UsingMatchers 类型

您可能注意到,清单 12 中的代码并不是很优雅。清单 11 中的 m 确实有点影响代码的可读性(“ensure that pop's value m (what the?) is test)。可以通过扩展 JBehave 提供的一个专门的基类(UsingMiniMock)来避免使用 UsingMatchers 类型。这样一来,清单 11 中最后一行就变成 Ensure.that(stStack.pop(), is("test")),这样可读性更好一点。

在清单 11 中,我确保 pop() 返回值 “test”。在使用 JBehave 的 Ensure 类的过程中,您常常会发现,需要一种更丰富的方式来表达期望。JBehave 提供了一种 Matcher 类型用于实现丰富的期望,从而满足了这一需求。而我选择重用 JBehave 的 UsingMatchers 类型(清单 11 中的 m 变量),所以可以使用 is()、and()、or() 等方法和很多其它整洁的机制来构建更具文学性的期望。

清单 11 中的 m 变量是 StackBehavior 类的一个静态成员,如清单 12 所示。


清单 12. 行为类中的 UsingMatchers
private static final UsingMatchers m = new UsingMatchers(){}; 

有了清单 11 中编写的新的行为方法之后,现在可以来运行它 — 但是这时会产生一个错误,如清单 13 所示。


清单 13. 新编写的行为不能运行
Failures: 1. 
 
1) StackBehavior should pop pushed value: 
java.lang.RuntimeException: nothing to pop 

怎么回事?原来是我的 push() 方法还没有完工。回到 清单 5,我编写了一个最简单的实现,以使我的行为可以运行。现在是时候完成这项工作了,即真正将被推入的值添加到内部容器中(如果这个值不为 null)。如清单 14 所示。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:追求 代码 质量

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