如何用ArchUnit测试类是否继承指定类?测试代码执行失败
如何用ArchUnit验证类是否间接继承指定类
你遇到的问题根源在于使用简单类名字符串时,ArchUnit无法正确定位到ClassA的全限定类,或者你的classes集合未包含ClassA/ClassB,导致ArchUnit无法解析完整的继承链路。
正确实现有两种可靠方式:
1. 使用全限定类名字符串
如果坚持用字符串形式,必须传入ClassA的全限定类名(比如com.example.ClassA),同时确保classes集合包含ClassA、ClassB、ClassC三个类:
ArchRuleDefinition.classes() .that() .haveSimpleName("ClassC") .should() .beAssignableTo("com.example.ClassA") // 替换为实际全限定类名 .check(classes);
2. 直接传入Class类型(推荐)
这种方式类型安全,避免字符串拼写错误,是更稳妥的写法:
ArchRuleDefinition.classes() .that() .haveSimpleName("ClassC") .should() .beAssignableTo(ClassA.class) .check(classes);
额外注意事项
- 确保
classes变量包含所有相关类:ClassA、ClassB、ClassC都要被扫描到,否则ArchUnit无法识别继承关系。例如用ClassFileImporter扫描时,要覆盖这些类所在的包:JavaClasses classes = new ClassFileImporter().importPackages("com.example");
内容的提问来源于stack exchange,提问作者Gefest
相关产品推荐
相关产品推荐

