Java 在ArchUnit中搜索未使用的类,如何查找MyClass.class引用?
我正在尝试使用进行单元测试,以检查是否有未使用的类。但是我不知道如何检查某个类是否被MyClass.class引用 例如,我有一门课:Java 在ArchUnit中搜索未使用的类,如何查找MyClass.class引用?,java,archunit,Java,Archunit,我正在尝试使用进行单元测试,以检查是否有未使用的类。但是我不知道如何检查某个类是否被MyClass.class引用 例如,我有一门课: public class MyClass { ... } 然后我用某种方法引用这个类: public class MySecondClass{ public void methodA(){ methodThatTakesClassAsParameter(MyClass.class); } ... } 如何从Ar
public class MyClass {
...
}
然后我用某种方法引用这个类:
public class MySecondClass{
public void methodA(){
methodThatTakesClassAsParameter(MyClass.class);
}
...
}
如何从ArchUnit中看到MyClass是从MySecondClass中引用的?我可能会为您提供一个(部分)解决方案
创建一个ArchCondition
public static class NotBeUnreferenced extends ArchCondition<JavaClass> {
NotBeUnreferenced() {
super("is not referenced by any other compilation units");
}
@Override
public void check(JavaClass javaClass, ConditionEvents events) {
Set<JavaAccess<?>> accessesFromOtherCompilationUnits = new HashSet<JavaAccess<?>>();
accessesFromOtherCompilationUnits.addAll(javaClass.getAccessesToSelf());
accessesFromOtherCompilationUnits.removeAll(javaClass.getAccessesFromSelf());
if (accessesFromOtherCompilationUnits.isEmpty() && javaClass.getDirectDependenciesToSelf().isEmpty()) {
String message = createCheckMessage(javaClass, "is unreferenced");
events.add(new SimpleConditionEvent(javaClass, false, message));
}
}
// taken from com.tngtech.archunit.lang.conditions.ArchConditions
public static <T extends HasDescription & HasSourceCodeLocation> String createCheckMessage(T object,
String message) {
return object.getDescription() + " " + message + " in " + object.getSourceCodeLocation();
}
}
ArchCondition<JavaClass> notBeUnreferenced = new NotBeUnreferenced();
ArchRule rule = classes().should(notBeUnreferenced);
collectedRules.add(rule);
你可能想
- 通过附加or条件(
),排除带有特定注释的类(例如,rule=rule.or(ArchConditions.beAnnotatedWith(…)
,@EJB
,@依赖的
)@无状态的
- 从测试类中排除代码
- 排除仅显示常量的类和接口
- 访问
和其他反射访问.class
- 访问常量(即静态最终字段)