2016-12-07 8 views
0

В настоящее время я работаю над проектом, в котором мне нужно запустить тестовые примеры JUnit, а затем извлечь информацию из целевого класса (тестируемого класса). Чтобы извлечь рассмотренные заявления, я использовал eclEmma, ​​но с помощью этого инструмента я могу только извлечь номера строк, которые были выполнены в Target после запуска тестового класса.Как извлечь логическое значение решения ветки?

Я хочу извлечь логические значения решений ветвления в операторах if, чтобы определить, какие условия проверяются при покрытии конкретной ветви true/false целевого класса.

Я знаю, что могу разбирать файл Java с помощью JavaParser, а затем извлекать следующую информацию, но я не уверен, как извлечь логическое значение решения ветви.

public void visit(IfStmt stmt, Void arg) 
    { 
     System.out.println(stmt.getCondition()); 
     System.out.println(stmt.getElseStmt()); 
     System.out.println(stmt.getThenStmt()); 
     super.visit(stmt, null); 
    } 
+0

Возможный дубликат [Eclemma говорит, что 1 из 4 ветвей не покрыт, но какая ветка это?] (Http://stackoverflow.com/questions/15493094/eclemma-says-1-of-4-branches-not- покрытый но-которые-отрасль-это-то) – Godin

ответ

2

EclEmma основан на JaCoCo code coverage library и просто обеспечивает его интеграцию в Eclipse, фактическая работа (КИП и анализ) осуществляется JaCoCo.

JaCoCo выполняет анализ байт-кода, а не исходного кода. Исходный код используется только для визуализации результатов анализа байт-кода (украшение путем выделения). Bytecode содержит только информацию о строках, поэтому, к сожалению, привязка байт-кода к исходному коду не является вообще тривиальной задачей и не имеет много общего с разбором исходного кода. Вот почему JaCoCo не предоставлен вне коробки. Однако некоторые экспериментальные работы были сделаны по этому вопросу. Посмотрите на следующие ссылки для получения более подробной информации:

взносы приветствуются JaCoCo, так что если кто-то сможет надежным реализовать такое отображение - дон Не стесняйтесь возвращаться.

-1

Вы на правильном пути: вы можете использовать посетитель на IfStmt, точно так, как вы сделали, и вы хотите, чтобы извлечь условие (это значение, которое появляется на круглых скобках), так что вы получите:

public void visit(IfStmt stmt, Void arg) { 
    System.out.println(stmt.getCondition()); 
    super.visit(stmt, null); 
} 

Тогда я не знаю, что вы хотите с ним сделать: вы можете распечатать код, конечно, или вы можете проанализировать его дальше.

Отказ от ответственности: Я вкладчик JavaParser