我正在为kotlin中的android项目开发一个gradle插件,我需要扫描项目源文件以获得所有测试&#39;名。我已经实现了目录扫描程序,我得到了Arraylist<File>
所有测试类。
我尝试将反射应用于此文件,但我总是找到一个没有类的异常。我想gradle插件试图在项目的同一个gradle插件中找到类,而不是使用插件的Android项目。
有没有办法扫描我的ArrayList中的每个File对象并获取带有注释@test
的所有方法?
答案 0 :(得分:1)
由于您拥有项目中所有源文件的列表,您需要迭代它们,依次打开它们并读取它们(作为文本)以查找任何方法在@Test
注释之后的名称。
根据您的编码标准的强大程度以及它们的遵循程度,这可能几乎是微不足道的或相当困难的。在我们的代码库中,您只需查找与^\s+@Test
匹配的行,然后将下一行与^\s+\w+\s+\w+\s+(\w+)\(
匹配即可获取方法名称。 (或者如果你愿意,可以将其标记化。)这几乎是你最简单的情况;如果您的代码库使用@Ignore
来禁用测试,或者有人在多行注释块(/* ... */
)中包装测试,或者可能存在奇怪的格式,缺少访问修饰符等,那么工作会更难。
哦,我不打扰在这里搜索如何忽略代码中的注释 - 大多数首次命中都做错了。错误包括假设多行注释从一行的开头开始(在一行上没有与多行注释开始匹配的前导内容)并在一行的结尾处结束;如果某行包含多行注释,那么还需要检查单行注释(可能注释掉多行注释开始,具体取决于顺序),以及其他问题。