Ich habe eine Situation, in der ich wissen muss, welche Methoden von einem einzelnen JUnit-Test aufgerufen werden. Wenn ich zum Beispiel den folgenden Pseudocode habe:
public class UnitTest {
public main() {
Circle c = new Circle()
c.getArea()
}
}
public class Circle {
public Circle() {
...
}
public getArea() {
...
getRadius()
}
private getRadius() {
...
}
}
Die Methodenaufrufe der UnitTest Klasse folgen dieser Reihenfolge (obwohl ich für meine Zwecke weder die Reihenfolge beibehalten noch die Methode des Aufrufers kennen muss):
- UnitTest.main
- Kreis.Kreis
- Kreis.getArea
- Kreis.getRadius
Im Wesentlichen möchte ich wissen, welcher Teil des Programms tatsächlich in den JUnit-Tests ausgeübt wird. Ich denke, ich kann das dynamisch herausfinden, aber ich habe Schwierigkeiten, ein Tool oder einen Ansatz zu finden. Das Hauptproblem bei einigen der Tools, die ich gefunden habe, ist, dass sie oft sehr visuell sind (Benutzerinteraktion erforderlich, um die erforderlichen Daten zu extrahieren). Ich suche etwas, das mir nur eine Liste der Methoden (xml, Text, etc...) ohne den GUI-Aspekt liefert. Letztendlich versuche ich, dies für Testsuiten über einen Skripting-Ansatz zu automatisieren.
Die Ansätze, die ich mir vorstelle, wären entweder:
- Verwendung eines Java-Agenten zum Ausdrucken der Klasse.Methode bei jedem Methodenaufruf.
- Verfolgung mit Aspekten wie diese
Wenn es ein Tool gibt, das dies bereits kann, wäre das großartig. Wenn nicht, scheint es, dass ich auf dem richtigen Weg bin, mein Problem mit einem der von mir genannten Ansätze zu lösen.
Für jede Hilfe/jeden Vorschlag wären wir dankbar.
UPDATE-SOLVED Ich beschloss, Emma mit den folgenden Befehlen zu verwenden, um die Informationen über Methodenaufrufe zu extrahieren (es muss nur der Bericht für jede Methode mit einer Abdeckung von über 0 % analysiert werden):
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