追求代码质量 - 亲身体验行为驱动开发 - 编程入门网
类的模式 。在那种情况下,覆盖是通过 GWT 的 Timer 类实现的。
如果现在运行清单 3 中的行为,应该看到出现错误。按照目前编写的代码, push() 方法不执行任何操作。所以不可能生成异常,从清单 4 中的输出可以看 到这一点。 清单 4. 没有发生期望的行为
清单 4 中的句子 “StackBehavior should throw exception upon null push” 模拟行为的名称(shouldThrowExceptionUponNullPush()),并加上类 的名称。实际上,JBehave 是在报告当它运行所需的行为时,没有获得任何反应 。当然,我的下一步是要使上述行为成功运行,为此我检查 null,如清单 5 所 示。 清单 5. 在栈类中增加指定的行为
当我重新运行行为时,一切都运行得很好,如清单 6 所示。 清单 6. 成功!
行为驱动开发 清单 6 中的输出与 JUnit 的输出是不是很像?这也许不是巧合,对不对? 如前所述,JBehave 是根据 xUnit 范例建模的,它甚至通过 setUp() 和 tearDown() 提供了对 fixture 的支持。由于我可能在整个行为类中使用一个 Stack 实例,我可能也会将那种逻辑推入(这里并非有意使用双关语)到一个 fixture 中,正如清单 7 中那样。注意, JBehave 将与 JUnit 一样遵循相同 的 fixture 规则 — 也就是说,对于每个行为方法,它都运行一个 setUp() 和 tearDown()。 清单 7. JBehave 中的 fixture
对于接下来的行为方法,shouldThrowExceptionUponPopWithoutPush() 表示 我必须确保它具有类似于 清单 3 中的 shouldThrowExceptionUponNullPush() 的行为。从清单 8 中可以看出,没有任何特别神奇的地方 — 有吗? 清单 8. 确保 pop 的行为
您可能已经清楚地知道,此时清单 8 并不会真正地编译,因为 pop() 还没 有被编写。但是,在开始编写 pop() 之前,让我们考虑一些事情。 追求代码质量 - 亲身体验行为驱动开发(4)时间:2010-12-12 IBM Andrew Glover确保行为 从技术上讲,在这里我可以将 pop() 实现为无论调用顺序如何,都只抛出一 个异常。但是当我沿着这条行为路线前进时,我又忍不住考虑一个支持我所需要 的规范的实现。在这种情况下,如果 push() 没有被调用(或者从逻辑上讲,栈 为空)的情况下确保 pop() 抛出一个异常,则意味着栈有一个状态。正如之前 Linda 思考的那样,栈通常有一个 “内部容器”,用于实际持有项目。相应地 ,我可以为 Stack 类创建一个 ArrayList,用于保持传递给 push() 方法的值 ,如清单 9 所示。 清单 9. 栈需要一种内部的方式来持有对象
现在我可以为 pop() 方法编写行为,即确保当栈在逻辑上为空时,抛出一个 异常。 清单 10. pop 的实现变得更容易
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |