AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式 - 编程入门网
id testHighlightUtilAppliedToTitleOfSearchResult() {
mockUtil.expects(once())
.method("highlight")
.with(eq("I am a big bear!"), eq(words));
result.getTitle();
}
}
AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式(8)时间:2011-09-07 IBM Nicholas LesieckisetUp() 方法实例化 mock 对象并将它注入到方面中。测试方法告诉 mock 等待对名为 “highlight” 的方法的调用,这个方法有两个参数:getTitle() 的返回值和在 SearchResult 中存储的单词清单。设置了期望后,测试调用 getTitle() 方法,它应当触发方面并产生预期的对 mock 的调用。如果 mock 没有收到调用,那么它就会在销毁时自动使测试失败。 注意 setUp() 方法存储了到原来 HighlightUtil 的引用。这是因为方面像 大多数对象一样,是单元素(singleton)的。因此,销毁时撤销 mock 注入的 影响很重要,否则,mock 会持续留在方面中并影响其他测试。这个方面的正确 销毁如下所示:
优缺点 这个模式对前一个模式做了补充,只是它测试方面的横切规范和上下文处理 而不是横切行为。因为不用检查方面的输出的间接副作用,所以可以更容易地产 生联结点匹配和上下文传递行为中的临界用例。 重要的是要认识到委派逻辑的优缺点,用 mock 进行测试对于使用对象或方 面的技术都是类似的。在这两种情况下,都是分离关注点,然后以更隔离的方法 验证每一个关注点。 对于注入 mock 来说,有一个特定于方面的问题。如果使用单元素方面(默 认的),那么对于方面的字段所做的所有改变,如用 mock 替换一个字段,在测 试结束时都必须撤销。(否则,mock 会挂起并可能影响系统的其他部分。)这 种销毁逻辑很难实现和记忆。编写一个测试清理方面,自动在每次测试后像在例 子中那样重新设置方面从概念上来说是简单的,但是其细节超出了本文的范围。 IV. 使用 mock 目标 在最后一节中,我介绍了我自己发明的、用于描述在编写方面测试时用到的 一种测试 helper 类类型的术语:mock 目标。在方面之前的世界中,一个 mock 对象 表示一个(手写或者动态生成)的类,它模仿要测试的一些类的协作器。 与此类似,mock 目标 是一个模仿要测试的一些方面的合法建议目标的类。 为了创建 mock 目标,编写一个与生产中的建议有某些相似结构或者行为的 类。例如,如果对于由 getter 返回的文字的突出显示感兴趣,可以编写下面这 样的一个 mock 目标:
AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式(9)时间:2011-09-07 IBM Nicholas Lesiecki然后,编写测试用例以验证方面正确地与目标交互,如清单 4 所示: 清单 4. 与 mock 目标交互以测试建议
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |