Java 是否可以检查方法是否在一组类中声明?

Java 是否可以检查方法是否在一组类中声明?,java,unit-testing,archunit,Java,Unit Testing,Archunit,我使用的是ArchUnit,我想检查包中的所有类是否只声明一个名为execute的公共方法。我有以下代码: JavaClasses importedClasses = new ClassFileImporter().importPackages("my.package"); methods().that().arePublic().should().haveName("execute").check(importedClasses); 它

我使用的是ArchUnit,我想检查包中的所有类是否只声明一个名为
execute
的公共方法。我有以下代码:

JavaClasses importedClasses = new ClassFileImporter().importPackages("my.package");        
methods().that().arePublic().should().haveName("execute").check(importedClasses);

它可以工作,但我希望当
execute
方法在任何类中都不存在时,该测试会失败。在我的代码中,测试是通过的,因为所有公共方法(零)实际上都有名称“execute”。

为了测试类,您必须基于它们(而不是可能不存在的方法)创建
ArchRule
。您可以使用计算公共方法并测试其名称,例如:

ArchRule规则=类()
.that().resideInAPackage(“my.package”)
.should(新的ArchCondition(“只有一个名为“execute”的公共方法”){
@凌驾
公共无效检查(JavaClass、JavaClass、ConditionEvents){
List publicMethods=javaClass.getMethods().stream()
.filter(javaMethod->javaMethod.getModifiers().contains(PUBLIC))
.collect(toList());
布尔满足=假;
String message=javaClass.getName()+“包含”+publicMethods.size()+“publicmethod”;
if(publicMethods.size()==1){
JavaMethod=publicMethods.get(0);
满足=方法.getName().equals(“执行”);
message+=“named'”+method.getName()+“'”+method.getSourceCodeLocation();
}否则{
message+=“s”+javaClass.getSourceCodeLocation();
}
添加(新的SimpleConditionEvent(javaClass,Suited,message));
}
});