Java - 查找仅在测试中使用的方法(未在源代码中使用)

Java - find methods used only in test (unused in source code)

未使用的方法有未使用的警告,可以删除,例如在 Eclipse 中

The method myMethod() from the type MyClass is never used locally

但有时您编写带有单元测试的代码,之后代码未在生产中使用(或删除),但方法仍(仅)用于单元测试

我们如何找到这些未在实际代码中使用的未使用方法(仅测试代码)

例如DAO方法:

public interface TransactionDao {

   public boolean updateTrasaction(int id);
}

@Repository
public class TransactionDaoImpl implements TransactionDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public boolean updateTrasaction(int id) {
        return (jdbcTemplate.update(... )>0);
    }
}

仅在测试中使用:

@Test   
public void testUpdateTrasaction() {
    Assert.assertEquals(transactionDao.updateTrasaction(1234), true);
}

我知道 static analysis tools and Halting Problem,但是,是否有针对此特定要求的解决方案?

在我看来,最简单的解决方案是首先从您的项目中删除或排除测试包,然后在构建后利用 some tool that finds all the unused methods, or update the Java Compiler Error/Warning settings for unused/unnecessary code 为您获取一些 errors/warnings 作为结果。

我找不到任何未使用的方法查找器 工具,您可以在其中排除某些软件包的某些用法。如果有的话,我仍然建议使用编译器执行上述步骤,因为我宁愿在我的 IDE 上依赖较少的工具,如果工具对生产力的贡献很小。

我认为更直接的答案是使用 DeadCodeDetector 参见:https://github.com/evernat/dead-code-detector/wiki

首先,运行 它包括您的 src/main 和 src/test 类 并输出到 XML 日志。 其次,运行 它只包括你的 src/main,并输出到第二个 XML 日志。

这两者之间的区别在于只在测试中调用的方法。

这是我正在采用的方法,用于删除不再需要的相当大的子系统。如果在 p运行 那个子系统之后有新的未使用的方法,那么它们只被那个子系统引用,它们也可以被删除。