Список вызовов методов во время выполнения модульного теста Java - PullRequest
3 голосов
/ 10 августа 2011

У меня есть ситуация, когда мне нужно знать, какие методы вызываются из одного теста 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

По сути, я хочу знать, какая часть программы фактически выполняется в тестах 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

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Вы ищете инструмент "Покрытие", такой как Эмма или Cobertura ?

1 голос
/ 10 августа 2011

Если вы хотите знать, какие методы вызываются вашим тестом, вы можете использовать такие инструменты покрытия кода, как cobertura или emma .

Оба они обеспечиваютотличная интеграция с maven, ant и eclipse и может создавать отчеты в формате xml или html.

...