Für das Szenario, in dem der Test für einen Agenten ausgeführt wird, und der Jacoco-Agent für diesen Ziel-Agent instrumentiert ist. Wird jacoco die Codeabdeckung für die Premain-Methode des Zielagenten melden?Gibt der jacoco-Agent einen Code-Coverage für den Prerain eines anderen Agenten an
Antwort
Javaagents werden in der Reihenfolge angewendet, in der sie in der Befehlszeile angegeben sind. Wenn der JaCoCo-Agent zuerst angegeben wird, wird seine Instrumentierung auf alle nachfolgenden Agenten angewendet.
Wenn Sie also die Abdeckung von Code, den ein Java-Agent ändert oder hinzufügt, einschließen möchten, sollten Sie diese nach JaCoCo einfügen.
Danke für diese Antwort. Ich habe verstanden, dass ich, wenn ich Code-Coverage für einen anderen Agenten bekommen möchte, den jacoco-Agenten zuerst in der Kommandozeile angeben muss. Aber meine Frage ist, würde die "Premain" -Methode des zweiten Agenten von jacoco Agent für die Codeabdeckung gemeldet werden? Ich habe versucht, ein Experiment in meinem lokalen, ich finde der Bericht des Jacoco würde nicht die Code-Abdeckung des zweiten Agenten enthalten. Versuchen Sie daher herauszufinden, ob der jacoco Agent diesen Teil melden würde oder nicht? –
@ Y.Feng ja es wird - ich habe Antwort hinzugefügt, die Beispiel enthält: http://Stackoverflow.com/a/42480303/244993 – Godin
JaCoCo-Agent instrumentiert und zeichnet die Ausführung von Klassen auf, die danach geladen werden. Java-Agenten werden in der Reihenfolge geladen, in der sie in der Befehlszeile angegeben sind. Wenn also der zweite Agent nach dem JaCoCo-Agenten angegeben wird, wird JaCoCo ihn instrumentieren und seine Ausführung aufzeichnen. Hier ist Beispiel:
Mittel src/main/java/Premain.java
:
import java.lang.instrument.Instrumentation;
public class Premain {
public static void premain(String args, Instrumentation inst) {
System.out.println("Hello world");
}
}
eine leere Test src/test/java/Test.java
nur in der Lage sein, Mittel zur Ausführung mit ihm, führt einen Code nicht von einem Agenten direkt:
import org.junit.Test
public class Test {
@Test
public void test() {
}
}
pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<properties>
<argLine>-javaagent:target/${project.build.finalName}.jar</argLine>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestEntries>
<Premain-Class>Premain</Premain-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<!-- to be able to use agent that was built -->
<id>default-test</id>
<phase>verify</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ausführung von mvn clean jacoco:prepare-agent verify jacoco:report
wird Bericht im Verzeichnis erzeugen target/site/jacoco
:
Danke für diese detaillierte Antwort und kurze Demo! Sehr hilfreich! –
- 1. Starten oder Stoppen eines Agenten durch einen anderen Agenten
- 2. Twilio, wie der Anruf zu trennen, wenn ein Agent den Anruf an einen anderen Agenten übertrug
- 3. Codeception Codecoverage von Abnahmetests
- 4. Verhindern Codecoverage drucken zu Konsole
- 5. Gibt den Textfeldwert eines anderen Formulars nach der Initialisierung zurück?
- 6. Config für OpenAM-Agenten
- 7. Gibt es eine Möglichkeit, einen Quellcode-Build von Qt an einen anderen Ort zu kopieren?
- 8. Den Text der WatchKit-Spracherkennung an einen anderen Schnittstellencontroller senden
- 9. identifizieren höchsten Wert mehrerer Variablen eines Agenten
- 10. Wie kann ein Agent einen anderen Agenten packen/starten?
- 11. Wie öffne ich den Ansichtsbereich eines Agenten beim Start?
- 12. regex für den einen oder anderen Charakter?
- 13. Gibt es ein Risiko, dass die Verbindungs-ID eines anderen Benutzers an den Client zurückgegeben wird?
- 14. Gibt es eine Schnittstelle für den menschlichen Agenten in Microsoft Bot Framework?
- 15. Gibt es einen Reflog für den Index?
- 16. Dialog Übergabe eines Wertes an einen anderen Dialog auf Knopfdruck
- 17. Gibt es einen Standard für den Kontextaustausch?
- 18. C++ einen Vektor an einen anderen anhängen
- 19. Die Konfiguration eines TFS2015-Build-Agenten schlägt fehl, weil der Agenten-Pool nicht gefunden wurde. Warum?
- 20. Übergabe einer Instanz eines Funktors an einen anderen Funktor
- 21. Gibt es einen Nullable Datepicker, an den ich binden kann?
- 22. SimpleXML: einen Baum an einen anderen anhängen
- 23. Gibt es einen anderen Container, der einem Set mit der Lookup-Leistung eines Vektors ähnlich ist?
- 24. kann ein Controller den Benutzer an einen anderen Controller senden
- 25. OTRS Dashboard zeigt keine Warteschlangendaten für bestimmte Agenten-/Rollenkombinationen an
- 26. Attribute eines Agenten in NS2 abrufen
- 27. Alle guten verteilten Agenten/Servicemodelle für .NET?
- 28. Verwenden von pySNMP zum Schreiben eines SNMP-Agenten (für OpenNMS)
- 29. Weisen Sie den Statistiken der Agenten eine Variable zu
- 30. Austauschen eines Index für einen anderen in Elasticsearch
nicht klar, was die Frage ist. – RamPrakash
@RamPrakash Jeder Javaagent hat eine 'Premain'-Methode, bei der die JVM den Agenten lädt. Ich frage, ob ich zwei Agenten anbiete, der erste ist Jacoco, der zweite ist ein anderer Agent. Wird die "Premain" -Methode des zweiten Agenten für die Code-Abdeckung von jacoco agent berücksichtigt? –