要分析的包由 “Layer” String 定义。
dataLayerViolations Collection 添加了 businessLayer String(表示一个包)来指明这是对期望架构的违背。
按照这四个要点,我已经有效地设置了 JDepend,以针对特定代码库发挥其魔力。现在,我要设定一些精确的逻辑以说明耦合值的变化。
清单 3 中的 testDataLayer() 测试用例是架构断言的核心。该方法可判定是否存在对 dataLayer 的任何违背 —— 如果 isLayeringValid() 方法(在下面的 清单 4 中定义)返回 false ,测试用例就被认为失败,也意味着必然存在一处架构违背。
清单 3. 使用 JDepend 测试架构违背
public void testDataLayer() {
if (!isLayeringValid(dataLayer, dataLayerViolations)) {
fail("Dependency Constraint failed in Data Layer");
}
}
清单 3 中测试用例所调用的方法如清单 4 所示:
清单 4. 循环查找每个包的传入耦合
private boolean isLayeringValid(String layer, Collection rules) {
boolean rulesCorrect = true;
Collection packages = jdepend.analyze();
Iterator itor = packages.iterator();
JavaPackage jPackage = null;
String analyzedPackageName = null;
while (itor.hasNext()) {
jPackage = (JavaPackage) itor.next();
analyzedPackageName = jPackage.getName();
Iterator afferentItor = jPackage.getAfferents().iterator();
String afferentPackageName = null;
while (afferentItor.hasNext()) {
JavaPackage afferentPackage = (JavaPackage) afferentItor.next();
afferentPackageName = afferentPackage.getName();
}
rulesCorrect = isEfferentsValid(layer, rules, rulesCorrect, jPackage, analyzedPackageName);
}
return rulesCorrect;
}
isLayeringValid() 方法的目的确定 清单 2 中 DIRECTORY_TO_ANALYZE 目录内所有包的传入耦合。您可以在清单 4 底部看到,该方法遵守 isEfferentsValid() 方法,如清单 5 所示。
这里,如果 isEfferentsValid() 方法发现某个包不符合指定的包依赖关系(由于从一个包到另一个包的传出耦合大于 0),则使用 清单 2 中的 dataLayerViolations 集合将该包标记为一个架构违背。这将间接导致 testDataLayer() 测试用例(如 清单 3 所示)失败。
文章来源于领测软件测试网 https://www.ltesting.net/