• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2008-6-24 10:28 | 作者: 不详 | 来源: 测试时代编辑整理 | 查看: 63次 | 进入软件测试论坛讨论

领测软件测试网


清单 11. 如果将一个值入栈,那么出栈的也应该是它,对吗?
               
public void shouldPopPushedValue() throws Exception{
 stStack.push("test");
 Ensure.that(stStack.pop(), m.is("test"));
}
 

为 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 所示。


清单 14. 完成 push 方法
               
public void push(E value) {
 if(value == null){
  throw new RuntimeException("Can't push null");
 }else{
  this.list.add(value);
 }
}
 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网