単一の 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を出力します。
- このようなアスペクトを使用したトレース
すでにこれを行うツールがあれば、それは素晴らしいことです。そうでない場合、指定したアプローチのいずれかを使用して問題を解決しようとしているように見えますか?
ヘルプ/提案をいただければ幸いです。
UPDATE-SOLVED 次のコマンドで 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