我想通过jdepend来测试我的软件包tree
是否为封装周期(即具有直接循环依赖性)。目前,它不是(见下面的输出,并且jdepend的Eclipse插件没有找到tree
的周期)。但断言下方,建议在jdepend手册,失败:如何在junit中使用jdepend的JavaPackage.containsCycle()来检测我的软件包是否在软件包周期中?
// 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
的断言失败是递归调用getEfferents()的原因,把所得封装中一个列表并返回true
如果某个软件包已经在其中。因此,检查是否存在可用的包周期(即,树是否具有间接循环依赖性)。
但我怎么能只测试直接循环依赖,即树是否是上包周期(而不是,这导致了一些其他的包周期,例如在org.hamcrest)?