Как я знаю, единственное место для добавления агента java - это конфигурация модульных тестов.
Агент должен быть добавлен в JVM, выполняющую приложение в процессе тестирования. Ваша путаница, вероятно, связана с тем, что обычно модульные тесты выполняются в той же JVM, что и тестируемый код.
Из вашего описания неясно, как запускается JVM с приложением.
Однако рассмотрим следующий src/Main.java
в качестве примера:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
String input;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
input = reader.readLine();
}
if ("hello".equals(input)) {
System.out.println("Hello, World!");
}
}
}
после компиляции
javac -d classes src/Main.java
Это приложение может быть выполнено в JVM с JaCoCo Java Agent взято из JaCoCo zip-дистрибутива следующим образом
java -javaagent:jacoco/lib/jacocoagent.jar -cp classes Main
Затем выполняются тесты - например, в этом случае ввод вручную "hello".
После постепенного завершения JVM вы получите файл jacoco.exec
.
Передав эти jacoco.exec
, исходные файлы и файлы классов в интерфейс командной строки JaCoCo , вы можете создать HTML отчет:
java -jar jacoco/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report
* 10 40 *
Какой пакет покрытия мне использовать? Это Eclemma или Jacoco?
EclEmma - это плагин для Eclipse IDE на основе JaCoCo.
Если для тестирования вы выполняете свое приложение из Eclipse IDE, то вы можете запустить его с помощью JaCoCo, используя EclEmma. Вот тот же пример, выполненный в Eclipse IDE:
Однако это не подходит для других сценариев ios, таких как сборки Ant.
Как запустить инструмент с пакетом покрытия? Должен ли я добавить его в файл build. xml? Должен ли я добавить его в командную строку?
Это зависит от того, как вы выполняете свое приложение - если для тестов ваше приложение выполняется Ant, то вы можете использовать JaCoCo Ant Tasks для настройки агента и генерации отчета. В качестве примера приведем build.xml
для Ant, который выдает тот же отчет для src/Example.java
, что и вышеприведенные команды:
<project xmlns:jacoco="antlib:org.jacoco.ant" name="Example Ant Build with JaCoCo" default="rebuild">
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="jacoco/lib/jacocoant.jar"/>
</taskdef>
<target name="clean">
<delete dir="classes"/>
<delete dir="report"/>
<delete file="jacoco.exec"/>
</target>
<target name="compile">
<mkdir dir="classes"/>
<javac srcdir="src" destdir="classes" debug="true" includeantruntime="false"/>
</target>
<target name="run" depends="compile">
<jacoco:agent property="jacocoAgent" />
<java classname="Main" fork="true">
<classpath path="classes"/>
<jvmarg value="${jacocoAgent}"/>
</java>
</target>
<target name="report" depends="run">
<jacoco:report>
<executiondata>
<file file="jacoco.exec"/>
</executiondata>
<structure name="JaCoCo Ant Example">
<classfiles>
<fileset dir="classes"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="src"/>
</sourcefiles>
</structure>
<html destdir="report"/>
</jacoco:report>
</target>
<target name="rebuild" depends="clean,report"/>
</project>
Если приложение выполняется каким-либо пользовательским самодельным инструментом, то, возможно, лучше добавить Агент к командной строке напрямую.