У меня есть ситуация, когда мне нужно знать, какие методы вызываются из одного теста 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.Circle
- Circle.getArea
- Circle.getRadius
По сути, я хочу знать, какая часть программы фактически выполняется в тестах JUnit. Я полагаю, что могу понять это динамически, но у меня возникают проблемы с поиском инструмента или подхода. Основная проблема с некоторыми инструментами, которые я обнаружил, заключается в том, что они часто очень визуальны (для извлечения необходимых данных требуется взаимодействие с пользователем). Я ищу что-то, что дает мне просто список методов (XML, текст и т. Д.) Без аспекта GUI. В конце я пытаюсь автоматизировать это для тестовых наборов с помощью сценариев.
Подходы, о которых я думаю, будут следующими:
- Использование агента Java для вывода class.method при каждом вызове метода.
- Трассировка с использованием аспектов вот так
Если есть инструмент, который уже делает это, это было бы замечательно. Если нет, кажется ли, что я нахожусь на пути к решению моей проблемы, используя один из указанных мной подходов.
Любая помощь / предложения будут оценены.
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