Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Code Coverage des Nuclos Builds und Integrationstests-Laufs wird mit folgenden Schritten erreicht. (ab v4.2024.13)

  1. JaCoCo Weaving Aufruf (jacoco-maven-plugin) nach JavaC aber bevor AspectJ den Bytecode noch weiter manipuliert. Die so genannte Offline Variante.
  2. Einbindung der JaCoCo Runtime als Dependency in allen Maven Modulen.
  3. Ausführung der Unit-Tests wie auch Integrationstests mit der Anweisung alle Coverage Daten in ein File zu schreiben: NUCLOS_GIT_ROOT/target/jacoco.exec
  4. JaCoCo Report Erstellung für alle angeforderten Maven Module mittels eines gesonderten Maven Aufrufs: mvn jacoco:report@coverage-report
  5. (Sonar Code Analyse verwendet automatisch die von JaCoCo generierten Reports, wenn vorhanden)

...

Im Anschluss sind die JaCoCo Reports zu finden unter MAVEN_MODUL/target/site/jacoco der unterschiedlichen Maven Module.

zu 5.) Sonar Analyse unter Verwendung der JaCoCo Reports

Die Einstellungen bezüglich Sonar in der Nuclos Maven pom.xml schalten die Coverage Auswertung zur Code Analyse automatisch hinzu:

Codeblock
languagebash
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=nuclos_nuclos

Die Sonar Analyse ist im Anschluss in der Cloud zu finden unter: https://sonarcloud.io/project/overview?id=nuclos_nuclos

...

Es waren viele Anläufe nötig, um die Coverage eines Nuclos Integrationstest-Laufs sammeln zu können. Die wichtigsten Fehlschläge und Erfahrungen im Umgang mit den Frameworks sollen hier festgehalten werden. Und , und ermöglichen in Zukunft womöglich hoffentlich eine Reduzierung der Komplexität, mit der wir jedoch gezwungen waren zu starten.

...

Die Reports von JaCoCo benötigen bei einer Offline Verwendung zwingend die originalen Klassen, wie es hier beschrieben wird: https://www.eclemma.org/jacoco/trunk/doc/classids.html
Die originalen Klassen sollten eigentlich mit dem goal jacoco:restore-instrumented-classes (https://www.eclemma.org/jacoco/trunk/doc/restore-instrumented-classes-mojo.html) wiederhergestellt werden können, hinterlässt aber in unseren Fall Spuren des Weavings, was bei der Report Erzeugung zu fehlen Fehlern führt.
Als Workaround kompilieren wir nach den Tests einfach ein weiteres mal. Die Executions hierfür tragen die IDs clean-instrumented-classes und restore-javac-only-classes. Leider verursacht dieser Workaround einen Fehler im war Archiv, anstatt nuclos-*.jar(s) unter WEB-INF/lib werden nur leere Verzeichnisse angelegt. Ursache bisher noch unbekannt, die Jars stehen weiterhin nach dem manuellen Clean+Restore im target der einzelnen Module zur Verfügung. Also ist ein Workaround für den Workaround nötig, zu finden unter der execution ID force-jar-delivery-to-war. Diese sorgt dafür, dass nach der Erzeugung der einzelnen Jars diese nach NUCLOS_GIT_ROOT/nuclos-war/target-force kopiert werden. Alles was sich hier befindet, wird beim packen des war vorrangig verwendet und verhindert/überschreibt die leeren Verzeichnisse.

...