追求代码质量: 亲身体验行为驱动开发
2009-11-19 00:00:00 来源:WEB开发网为 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. 行为类中的 UsingMatchersprivate 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 所示。
更多精彩
赞助商链接