我想通过jdepend在 junit 中测试我的包tree
是否处于包循环中(即具有直接循环依赖关系)。目前,它不是(见下面的输出,jdepend 的 Eclipse 插件没有找到循环tree
)。但是 jdepend 的手册中建议的以下断言失败了:
// setup....
JavaPackage p = jdepend.getPackage("tree");
System.out.println(p.getName() + "'s efferent packages: ");
for (Object jp : p.getEfferents()) {
System.out.println(((JavaPackage) jp).getName());
}
assertThat(p.containsCycle(), is(false));
输出是:
tree's efferent packages:
java.util
java.lang
java.lang.reflect
java.util.logging
java.io
org.hamcrest
断言失败的原因是containsCycle()
递归调用 getEfferents(),将生成的包放在一个列表中,true
如果某个包已经在其中,则返回。所以containsCycle()
检查是否存在可达包循环(即树是否有间接循环依赖)。
但是我怎样才能只测试直接循环依赖,即树是否在一个包循环中(而不是它导致一些其他的包循环,例如在 org.hamcrest 中)?