可以使用ArchUnit框架中的API来验证一个方法是否仅调用了一个外部方法。示例如下:
@Test
public void verifyMethodOnlyCallsOneOutsideMethod() {
JavaClasses classes = new ClassFileImporter().importPackages("com.example");
DescribedPredicate predicate = new DescribedPredicate("calls only one outside method") {
@Override
public boolean apply(JavaMethod input) {
return input.getCallsFromSelf().stream()
.filter(call -> !call.getTarget().isConstructor())
.map(call -> call.getTarget().getOwner())
.distinct()
.count() == 1;
}
};
ArchRule rule = methods().that().arePublic().should().satisfy(predicate);
rule.check(classes);
}
上述代码使用ArchUnit验证方法的调用是否只有一个外部方法。方法调用列表中排除构造函数的方法,将目标方法的所属者进行去重,如果去重之后的数量为1,则表示方法仅调用了一个外部方法。最后,定义ArchRule来应用验证规则。