【问题标题】:Java - find methods used only in test (unused in source code)Java - 查找仅在测试中使用的方法(未在源代码中使用)
【发布时间】:2019-06-25 04:58:02
【问题描述】:

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

MyClass 类型的方法 myMethod() 永远不会在本地使用

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

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

  • 我的测试在 tests 文件夹下,代码在 src 文件夹下

例如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,但是,是否有针对此特定要求的解决方案?

【问题讨论】:

  • 为什么不暂时删除所有测试包,然后检查未使用的方法呢?非常简单的解决方案,无需任何工具等。
  • @buræquete 我可以考虑,但是搜索可以忽略文件夹有没有简单的方法? (我有多个模块)
  • 要查找 所有 未使用的方法,您总是需要一些工具,无论是在 Intellij 还是 Eclipse 中完成,但这些工具都没有一些这样的包忽略功能.最好只使用该工具并删除测试包来查找所有真正未使用的方法。
  • 也许您可以在Java compiler settings 中增加未使用代码的警告级别,以便在构建后,您可以将未使用的方法作为错误或只是警告?在你删除你的测试之后。比得到一些愚蠢的工具要好。
  • 它可以通过为测试创建一个并行项目来工作。在测试中包含主项目,该方法将不会在项目本身中使用,因此警告将可见

标签: java eclipse static-analysis unused-functions


【解决方案1】:

在我看来,最简单的解决方案是首先从您的项目中删除或排除测试包,然后使用 some tool 查找所有未使用的方法,或者更新 Java Compiler Error/Warning settings for unused/unnecessary code 以获取一些错误/警告结果在构建之后为您服务。

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

【讨论】:

  • 我正在寻找类似于 Intellij 功能的东西,它显示未使用的功能已褪色。
【解决方案2】:

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

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

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

这是我正在采用的方法,用于移除不再需要的相当大的子系统。如果修剪该子系统后有新的未使用方法,则它们仅被该子系统引用,也可以删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2017-12-04
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多