AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式 - 编程入门网
SomeString();
assertEquals(shouldBeHighlighted, "highlighted text");
}
注意在这个例子中,我结合了 mock 目标和 mock 对象(如在 第 III 节, 模式 2 中所描述的)。mock 目标为下面三种技术提供了基础。 模式 1. 通过扩展一个抽象方面并提供一个切点来测试建议 针对 :横切功能 概述 :Prework :如果有必要,重新编写方面,将它分为一个抽象方面以及 一个扩展它并具体化一个或者多个切点的具体方面。 有了抽象方面后,在测试类中创建一个 mock 目标。创建一个扩展了抽象方 面的测试方面。让测试方面提供明确针对 mock 目标的切点。这个测试通过查找 建议的已知副作用或者使用一个 mock 对象来验证方面中的建议是否成功。 示例:扩展 AbstractHighlighter 假定已经编写了 上一节中的测试代码。为了使测试通过,必须将 Highlighter 方面分解为一个抽象方面和一个子方面,如下所示:
AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式(10)时间:2011-09-07 IBM Nicholas Lesiecki下一步,用一个只用于测试案例的方面扩展 AbstractHighlighter 方面。下 面我将它展示为测试案例的一个静态内部方面:
这个方面通过选择 mock 目标上所有的方法执行具体化了 highlightedTextProperties 切点。 优缺点 显然,这种测试过程是一种人造的情况。对一个假的对象测试假的方面。不 过,这只是表明测试的不是真正的切点。仍然可以验证建议和抽象方面所指定的 ITD 代码。在例子中,测试验证建议正确地编组了来自 ITD 的数据以及原来联 结点的返回值、将它传递给一个工具类并返回新的结果。这涉及了相当多的行为 。使用一个 mock 目标还使测试更清晰了,因为测试的读者不必阅读真正目标的 行为以及方面的行为。这种测试在为方面库编写单元测试时特别有用,因为只有 到了方面加入到具体的应用程序中以后才会有真实的目标。 如果将方面分解以利用这种模式的好处,那么您可能使它更具可扩展性。比 如,如果系统的新部分需要参与突出显示行为,那么它们可以扩展抽象的方面并 定义覆盖新情况的切点。这样,抽象方面就与它所建议的系统解耦了。 模式 2. 测试与 mock 目标匹配的切点 针对 :横切规范和功能 概述 :这项技术与上一技术密切相关。这次不是扩展一个抽象类,而是编写 mock 目标,以使它匹配要测试的方面上的一个切点。可以通过检查方面是否建 议了 mock 目标来测试切点是否正确。如果要测试的切点过度专门化,那么可能 需要重新编写它,使得 mock 目标可以更容易地“预定”建议。 示例:基于一个标志接口测试切点 不是使突出显示方面成为抽象的,而是改写切点使它匹配 Highlightable 接 口上的方法执行:
这种宽泛的切点匹配 Highlightable 上的所有 String getter。因为切点不 枚举特定的类,它已经匹配了 mock 目标上的 getSomeString() 方法。测试的 其余部分保持不变。 AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式(11)时间:2011-09-07 IBM Nicholas Lesiecki变化:使用一个注释 还 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |