【发布时间】: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 类的方法调用遵循这个顺序(尽管出于我的目的,我不需要保持顺序,也不需要知道调用者的方法):
- UnitTest.main
- 圆.圆
- Circle.getArea
- 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