的改变变得困难了。在真实世界中,横切比较工具可以有很多配置,对某些方面的改变发出警报,而忽略与其他方面有关的改变。
III. 使用委派
方面可以并且通常用普通对象实现横切行为。可以利用这种关注点的分离分别测试横切规范及它们的行为。下面两个模式展示如何使用委派和 mock 对象检查方面的这两个部分。
模式 1. 测试委派的建议逻辑
针对 :横切功能
概述 :如果还没有做的话,可以将一些或者全部建议逻辑委派给其他可以直接测试的类。(如果愿意的话,还可以将行为委派给方面的公共方法。)
例子:将突出显示逻辑转移到其他类
要更好地在隔离状态下测试突出显示逻辑,可以将它转移到一个专门的工具类中:
private HighlightUtil highlightUtil = new CssHighlightUtil();
public void setHighlightUtil(HighlightUtil highlightUtil){
this.highlightUtil = highlightUtil;
}
String around(Highlightable highlightable) :
highlightedTextProperties() && this(highlightable)
{
String result = proceed(highlightable);
return highlightUtil.highlight(result, highlightable.getHighlightedWords());
}
通过抽取突出显示逻辑,可以编写调用 HighlightUtil 类的方法的单元测试。
优缺点
这项技术使得在域逻辑中产生边缘用例更容易了。它还有助于隔离问题,如果 helper 类的测试失败,就会知道是它而不是方面有问题。最后,委派逻辑通常会得到更干净的关注点分离。在这个例子中,通过将文字突出显示逻辑抽取到其它类,它变成系统其他部分可以独立于这个方面使用的一项操作。从而使方面获得了使用不同的突出显示策略的灵活性(HTML 的 CSS 突出显示、纯文本的全部大写突出显示等等)。
不利的一面是,这种技术在逻辑难于抽取时就无能为力了。例如,最好让简单的逻辑留在原处。同时,一些方面将状态存储到本地或者它们建议的类的 ITD 中。状态存储通常构成了方面逻辑的签名部分,它并不总能干净地转移到 helper 类中。
模式 2. 使用模拟对象记录建议触发
针对 :横切规范和功能
概述 :这项技术补充了前一项技术。如果将建议行为抽取到另一个类中,那么就可以用一个 mock 对象替代 helper 类对象,并验证建议是否在正确的联结点上触发。还可以验证建议将正确的上下文传递给了 helper 类,不管是直接用建议参数还是用之前存储的状态。
注: 如果需要对 mock 对象的介绍,请参阅 参考资料。
例子:用一个 mock HighlightUtil 测试 Highlighter 方面
我们已经看到了方面如何委派到另一个类中以处理实际的文字突出显示。这使得在测试中向方面注入不同的 highlighter 实现成为可能。清单 3 中的代码利用 JMock 库做到了这一点。(请参阅 参考资料。)
文章来源于领测软件测试网 https://www.ltesting.net/