【问题标题】:List of Method Calls During Execution of Java Unit TestJava单元测试执行期间的方法调用列表
【发布时间】:2011-08-10 15:58:13
【问题描述】:

我有一种情况,我需要知道从单个 JUnit 测试中调用了哪些方法。例如,如果我有以下伪代码:

public class UnitTest {    
  public main() {
    Circle c = new Circle()
    c.getArea()
  }
} 

public class Circle {
  public Circle() {
    ...
  }    
  public getArea() {
    ...
    getRadius()
  }
  private getRadius() {
    ...
  }
}

UnitTest 类的方法调用遵循这个顺序(尽管出于我的目的,我不需要保持顺序,也不需要知道调用者的方法):

  1. UnitTest.main
  2. 圆.圆
  3. Circle.getArea
  4. Circle.getRadius

基本上,我想知道在 JUnit 测试中实际执行了程序的哪一部分。我想我可以动态地解决这个问题,但是我很难找到工具或方法。我发现的一些工具的主要问题是它们通常非常直观(需要用户交互来提取所需的数据)。我正在寻找的东西只给我一个没有 GUI 方面的方法列表(xml、文本等)。最后,我尝试通过脚本方法为测试套件自动执行此操作。

我正在考虑使用的方法是:

  • 在每次方法调用时使用 Java 代理打印出 class.method
  • 使用方面进行跟踪like this

如果有一个工具已经可以做到这一点,那就太好了。如果不是,我是否正在使用我指定的一种方法来解决我的问题。

任何帮助/建议将不胜感激。

更新已解决 我决定使用 Emma 和以下命令来提取方法调用的信息(只需要解析覆盖率超过 0% 的任何方法的报告):

emmarun -r xml                 // To output to XML
  -Dreport.sort=-method        // Sort method coverage in descending order
  -Dverbosity.level=silent     // Minimize script output
  -Dreport.metrics=method:1    // Flag any method with a 0% coverage
  -Dreport.columns=method,name // Only show the method and name columns
  -Dreport.depth=method        // Consider the data of method coverage

【问题讨论】:

    标签: java junit aspectj call-graph javaagents


    【解决方案1】:

    您是否在寻找“覆盖”工具,例如 EmmaCobertura

    【讨论】:

    • 我确实考虑过一个覆盖工具(目前我正在看着 Emma 试图弄清楚我是否可以轻松地从报告中提取所需的信息)。不过,我仍在尝试找到一个更简单的解决方案来解决这个问题。必须有一些简单的方法来提取正在运行的程序的方法调用列表。
    • Emma 和 Cobertura 可以将结果导出为包含类和方法名称的 XML,还是我误解了您的要求?
    • 看了 Emma 之后,我很确定我可以从 XML 文件中获得所有需要的信息。
    【解决方案2】:

    如果您想知道您的测试调用了哪些方法 您可以使用 coberturaemma 等代码覆盖率工具。

    它们都提供了与 maven、ant 和 eclipse 的完美集成 并可以生成xml或html报告。

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多