执行Java单元测试期间的方法调用列表

时间:2011-08-10 15:58:14

标签: java junit aspectj call-graph javaagents

我有一种情况需要知道从单个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. Circle.Circle
  3. Circle.getArea
  4. Circle.getRadius
  5. 基本上,我想知道在JUnit测试中实际执行的程序的哪个部分。我想我可以动态地解决这个问题,但我找不到工具或方法。我发现的一些工具的主要问题是它们通常非常直观(需要用户交互来提取所需的数据)。我正在寻找一些东西,只给我一个方法列表(xml,文本等...)没有GUI方面。最后,我试图通过脚本方法为测试套件自动化。

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

    • 使用Java代理在每次方法调用时打印 class.method
    • 使用Aspects追踪like this

    如果有一个已经做到这一点的工具会很棒。如果没有,我似乎正在使用我指定的方法之一来解决我的问题。

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

    UPDATE-解决 我决定使用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
    

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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