背景:
- 我正在使用(对我而言)一个相当大的代码库(例如:我目前只检查了一些相关项目,以及它的 > 11000 个类)。
- Build 是 ant,Tests 是 JUnit,CI 是 Jenkins。
- 在签入之前运行所有测试不是一种选择,它需要 Jenkins 几个小时。即使对于某些单独的应用程序,它也可能是 45 分钟。
- 有些测试不引用基于反射的单个方法,在某些情况下甚至不直接引用被测方法的类,因为它们询问聚合器类,并且知道传递方法的模式在这里使用。因为它是一个很大的代码库,超过 10 个开发人员,而且我不是负责人,所以这是我目前无法更改的。
我想要的是能够在签入之前打印出与 git diff 列表中的任何类相距两度(Kevin-Bacon-wise)的所有测试类的列表。这样,当我错过的东西最终运行并出现错误时,我可以将它们全部运行并减少来自 Jenkins 的愤怒电子邮件。
我能想到的最简单的方法是自己用 Ruby 脚本或类似的脚本编写代码,这样我就可以解释我们正在使用的一些模式,但要做到这一点,我需要能够查询“哪个类引用类 X?”
我可以解析 .java 或(更简单的) .class 文件来获取此信息,但我不想:) 有没有办法让 Javac 在编译时以简单的格式导出它?