java - 确定哪些测试用例覆盖了一个方法

标签 java jakarta-ee selenium junit code-coverage

我目前正在做的项目需要我编写一个工具,在 Web 应用程序上运行功能测试,并输出方法覆盖率数据,记录哪个测试用例遍历了哪个方法。

详细信息: 被测 Web 应用程序将是在 servlet 容器(例如 Tomcat)中运行的 Java EE 应用程序。功能测试将使用 JUnit 在 Selenium 中编写。一些方法将被注释,以便在部署到测试环境之前对它们进行检测。一旦执行了 Selenium 测试,将记录注释方法的执行。

问题:这个项目的最大障碍是找到一种方法将测试用例的执行与方法的遍历联系起来,尤其是测试和应用程序在不同的 JVM 上运行,并且无法将测试用例的名称向下传输到应用程序,也无法使用线程信息将测试与代码执行相关联。

建议的解决方案:我的解决方案包括使用执行时间:我扩展 JUnit 框架以记录测试用例的执行时间,然后检测应用程序以节省时间遍历了方法。我尝试使用相关性将测试用例与方法覆盖率联系起来。

预期问题:此解决方案假定测试用例按顺序执行,并且一个测试用例在下一个测试用例开始之前结束。这个假设对于 JUnit 是否合理?

问题:简单地说,我能否了解您对提议的解决方案的意见,以及关于如何改进并使其在大多数 Java EE 应用程序上更健壮和更实用的建议?或者导致已经实现的解决方案?

谢谢

编辑:要添加更多要求,该工具应该能够在任何 Java EE 应用程序上工作,并且需要对应用程序进行最少的配置或更改。虽然我知道这不是一个现实的要求,但该工具至少应该不需要对应用程序本身进行任何巨大的修改,例如添加类或代码行。

最佳答案

您是否查看过现有的覆盖工具(Cobertura、Clover、Emma 等)。我不确定其中一个是否能够将覆盖率数据链接到测试用例,但至少使用开源的 Cobertura,您可以执行以下操作:

  • 使用 cobertura 对类进行检测
  • 部署经过检测的网络应用
  • 开始测试套件
    • 每次测试后,调用 Web 应用程序上的一个 URL,该 URL 将覆盖率数据保存到某个以刚刚运行的测试命名的文件中,并重置覆盖率数据
  • 在测试套件之后,为每个保存的文件生成一份 cobertura 报告。每个报告都会告诉测试运行了哪些代码

如果您需要合并报告,我想使用 cobertura API 从保存的文件集生成它应该不会太难。

关于java - 确定哪些测试用例覆盖了一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261889/

相关文章:

java - 如何提取正则表达式的第一部分?

java - EJB 仍然有用吗? Spring Framework 有哪些替代 EJB 的方法?

c# - Selenium Webdriver/C# - 如何在点击后确认页面加载?

selenium - 使用 selenium : chrome screensharing auto select tab and share with audio 进行测试

java - Java 中的 ASCII 字符集问题

java - 使用 SharedPreferences 保存复选框,java

java - 什么是NullPointerException,我该如何解决?

html - 为什么我的弹出窗口坏了?

jakarta-ee - 何时在无状态 session bean 上使用有状态 session bean?

java - 如何从具有相同结构的不同 jar 解析我的类