我正在构建一个识别测试类的程序,并让编码人员了解他编写的测试代码与实际源代码相比有多少。我的问题是如何让程序识别测试类,尽管已经使用了测试类型?您在测试课上可能发现的主要标志是什么?是 @Test
符号吗?如果有怎么处理?
这是我做的一个识别测试类的类的一段代码:
public void walk(String path) throws FileNotFoundException {
int countFiles = 0;
File root = new File(path);
File[] list = root.listFiles();
if (list == null) {
return;
}
for (File f : list) {
if (f.isDirectory()) {
walk(f.getAbsolutePath());
}
if (f.getName().endsWith(".java")) {
System.out.println("File:" + f.getName());
Scanner sc2 = new Scanner(f);
while (sc2.hasNextLine()) {
count++;
String str = sc2.nextLine();
for (int i = 0; i < str.length(); i++) {
if(str.equals("@Test")){
System.out.println("this a test clsee!");
}
但不幸的是我的想法行不通。那我该怎么办?
最佳答案
我知道这可能不是您正在寻找的答案,但让我给您两个替代想法。
如果您使用 maven或 gradle作为您的构建工具,您应该拥有所有 无论如何,你的测试类都在
src/test/java
文件夹中,这样很容易 将它们与您的生产代码(位于src/main/java
文件夹)。其他工具可能具有类似的结构。 如果您不喜欢,您可能需要考虑转换。一旦您拥有不同的测试代码和生产代码 文件夹,您可以简单地计算这些文件夹中的所有
*.java
文件 结构(或编写 bat/bash/任何脚本来为您完成)。因为纯粹的测试代码量并不能真正告诉您有关实际 test coverage 的任何信息,您可能想要寻找一种工具来帮助您衡量此覆盖率并关注测试的质量而不是数量。
如果您使用的是 Eclipse,例如EclEmma (这可能不是唯一的,也不是最好的,而只是我正在使用的那个)。它向 Eclipse 添加了一个新的启动模式,然后您可以在 Coverage 模式下启动您的单元测试。在这种模式下,EclEmma 会记录测试运行时正在执行的生产代码行,让您清楚地了解代码的哪些部分已被测试,哪些未被测试。它还会计算一些有关覆盖的线路或分支百分比的统计数据,以帮助您识别薄弱环节。
(现在至少快速解决您的代码:理论上您的方法应该有效。在实践中,看起来您应该阅读 java 中的字符串比较。替换您的 str.equals 可能值得一试("@Test")
使用简单的 str.contains("@Test")
循环。)
关于java - 识别测试类的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35670646/