gpt4 book ai didi

java - 在 ArchUnit 中搜索未使用的类,如何找到 MyClass.class 引用?

转载 作者:行者123 更新时间:2023-12-04 13:02:09 25 4
gpt4 key购买 nike

我正在尝试使用 ArchUnit 进行单元测试检查我是否有任何未使用的类。但我不知道如何检查某个类是否被 MyClass.class 引用。

例如我有一个类:

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
  ArchCondition<JavaClass> notBeUnreferenced = new NotBeUnreferenced();
ArchRule rule = classes().should(notBeUnreferenced);
collectedRules.add(rule);
你可能想要
  • 通过附加或条件 ( @EJB )
  • 排除具有某些注释的类(例如, @Dependent@Statelessrule = rule.or(ArchConditions.beAnnotatedWith(...)) )
  • 从测试类中排除代码
  • 排除仅显示常量的类和接口(interface)

  • 已知限制
    请注意,如果唯一访问是
  • 访问 .class和其他反射访问
  • 访问常量(即静态最终字段)
  • 关于java - 在 ArchUnit 中搜索未使用的类,如何找到 MyClass.class 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53671469/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com