假定已经编写了 上一节中的测试代码。为了使测试通过,必须将 Highlighter 方面分解为一个抽象方面和一个子方面,如下所示:
public abstract aspect AbstractHighlighter {
public abstract pointcut highlightedTextProperties();
//... aspect continues
}
public aspect HighlightResults extends AbstractHighlighter {
public pointcut highlightedTextProperties() :
(
//...define pointcut as before
);
}
下一步,用一个只用于测试案例的方面扩展 AbstractHighlighter 方面。下面我将它展示为测试案例的一个静态内部方面:
private static aspect HighlightsTestClass extends AbstractHighlighter {
public pointcut highlightedTextProperties() :
execution(public String HighlightMockTarget.*(..));
}
这个方面通过选择 mock 目标上所有的方法执行具体化了 highlightedTextProperties 切点。
优缺点
显然,这种测试过程是一种人造的情况。对一个假的对象测试假的方面。不过,这只是表明测试的不是真正的切点。仍然可以验证建议和抽象方面所指定的 ITD 代码。在例子中,测试验证建议正确地编组了来自 ITD 的数据以及原来联结点的返回值、将它传递给一个工具类并返回新的结果。这涉及了相当多的行为。使用一个 mock 目标还使测试更清晰了,因为测试的读者不必阅读真正目标的行为以及方面的行为。这种测试在为方面库编写单元测试时特别有用,因为只有到了方面加入到具体的应用程序中以后才会有真实的目标。
如果将方面分解以利用这种模式的好处,那么您可能使它更具可扩展性。比如,如果系统的新部分需要参与突出显示行为,那么它们可以扩展抽象的方面并定义覆盖新情况的切点。这样,抽象方面就与它所建议的系统解耦了。
模式 2. 测试与 mock 目标匹配的切点
针对 :横切规范和功能
文章来源于领测软件测试网 https://www.ltesting.net/