Używam Maven 3.0.3, JUnit 4.8.1 i Jacoco 0.6.3.201306030806 i próbuję utworzyć raporty pokrycia testów.
Mam projekt tylko z testami jednostkowymi, ale nie mogę uzyskać raportów do uruchomienia, wielokrotnie otrzymuję błąd: Skipping JaCoCo execution due to missing execution data file
kiedy uruchamiam:
mvn clean install -P test-coverage
Oto jak skonfigurowany jest mój pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx2048m</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
...
<profile>
<id>test-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<configuration>
<destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
<datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
</configuration>
<executions>
<execution>
<id>prepare-unit-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- prepare agent for measuring integration tests -->
<execution>
<id>prepare-integration-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<propertyName>itCoverageAgent</propertyName>
</configuration>
</execution>
<execution>
<id>jacoco-site</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Wszystkie moje testy przebiegły pomyślnie. Oto niektóre wyniki Mavena:
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-unit-tests) @ myproject ---
[INFO] argLine set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
...
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0
[INFO]
...
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-integration-tests) @ myproject ---
[INFO] itCoverageAgent set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (default) @ myproject ---
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:verify (default) @ myproject ---
[INFO] Failsafe report directory: /Users/davea/Dropbox/workspace/myproject/target/failsafe-reports
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (jacoco-site) @ myproject ---
[INFO] Skipping JaCoCo execution due to missing execution data file
[INFO]
Jakieś pomysły jakiej konfiguracji mi brakuje?
destFile
i niech napisać do domyślnego docelowego pliku / jacoco.exec.Odpowiedzi:
jacoco-maven-plugin: 0.7.10-SNAPSHOT
Od jacoco: agent przygotowawczy, który mówi:
Zwróć uwagę na
@{argLine}
to, co zostało dodane do-your -extra -arguments
.Dziękuję Slavie Semushinowi za zauważenie zmiany i zgłoszenie w komentarzu .
jacoco-maven-plugin: 0.7.2-SNAPSHOT
Podążając za Jacoco: przygotuj-agent, który mówi:
powinieneś zmienić następujący wiersz w
maven-surefire-plugin
konfiguracji wtyczki z (zwróć uwagę na${argLine}
wnętrze<argLine>
):do
Dokonaj również niezbędnych zmian w drugiej wtyczce
maven-failsafe-plugin
i zamień następujące (ponownie zwróć uwagę na${argLine}
):do
źródło
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. Nie deklaruję jawnie wtyczki maven-surefire-plugin i nie ustawiam konfiguracji. Po prostu dodaję symbol zastępczy argLine w wierszu poleceń maven, jakmvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Teraz generowany jest plik jacoco.exec, a sonar generuje raport pokrycia.Napotkałem nieco inny problem, który zwrócił ten sam błąd.
Prawda jest taka, że ten błąd powraca z wielu, wielu powodów. Eksperymentowaliśmy z różnymi rozwiązaniami w Stack Overflow, ale stwierdziliśmy, że ten zasób jest najlepszy. To obala wiele różnych potencjalnych powodów, dla których Jacoco może zwrócić ten sam błąd.
Dla nas rozwiązaniem było dodanie do konfiguracji agenta przygotowującego.
Wyobrażam sobie, że większość użytkowników będzie tego doświadczać z różnych powodów, więc spójrz na wspomniany zasób!
źródło
**/*Test.java
gdy moje klasy testowe zostały nazwane*Tests.java
*Test.java
klasy i jednej metody testowej z adnotacją,@Test
aby Jacoco mógł coś zrobić. 2. W Travisie zmienne środowiskowe mojego projektu, które miały literówkęSONART_TOKEN=*****
, powinny zostać nazwaneSONAR_TOKEN=*****
. Zobacz dokumentację Travisa tutaj , wyszukajor define SONAR_TOKEN in your Repository Settings
. Po naprawieniu kompilacja przebiegła pomyślnie. Możesz zobaczyć mój projekt gitbhub, o którym mowa .Może się zdarzyć, że jakaś inna konfiguracja argline lub wtyczka w pom może nadpisywać konfigurację zlecenia wykonania jacoco.
argLine ustawione na -
javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
Jeden z przykładów
Po pozbyciu się argLine z tych wtyczek, jacoco zaczął normalnie działać.
źródło
Można również otrzymać błąd „Pomijanie wykonania JaCoCo z powodu braku pliku danych wykonawczych” z powodu braku testów w projekcie. Na przykład, gdy uruchamiasz nowy projekt i nie masz żadnych plików * Test.java.
źródło
F Co powiedział tdrury:
zmień konfigurację wtyczki na następującą:
Edycja: Właśnie zauważyłem jedną ważną rzecz, destFile i dataFile wydają się rozróżniać wielkość liter, więc powinno to być destFile, a nie destfile.
źródło
Wiem, że to pytanie jest dość stare, ale jeśli ktoś taki jak ja przyjdzie tutaj w poszukiwaniu odpowiedzi, może to pomóc. Dzięki temu udało mi się przezwyciężyć powyższy błąd.
1) Usuń poniższy fragment kodu z wtyczki maven-surefire-plugin
2) Dodaj poniższy cel:
źródło
Właśnie dotarłem do tego samego problemu.
Mam klasę o nazwie
HelloWorld
i utworzyłem dla niej klasę testową o nazwieHelloWorldTests
, a następnie otrzymałem wynikSkipping JaCoCo execution due to missing execution data file.
Następnie próbowałem zmienić mój,
pom.xml
aby działał, ale próba się nie powiodła.Wreszcie po prostu zmieniam nazwę
HelloWorldTests
naHelloWorldTest
i zadziałało!Więc myślę, że domyślnie , jacoco rozpoznaje tylko klasę testową nazwie jak
XxxTest
, co wskazuje, że jest to test dla klasyXxx
. Po prostu zmień nazwy klas testowych na ten format, który powinien działać!źródło
Wypróbowałem wszystkie odpowiedzi, ale zadziałała tylko następująca kombinacja porad. Czemu? Miałem bardzo specyficzne wymagania:
mvn clean verify
(Maven 3.6.0)javaagent
zdefiniowanej wesurefire
wtyczceRozwiązanie - dołącz
argLine
wartość wsurefire
konfiguracji za pomocą właściwości maven „późnej wymiany”,@{...}
jak wyjaśniono wsurefire
FAQ ( moja stała konfiguracja )Nieudana pierwsza próba - zdefiniuj właściwość jaCoCoArgLine w
prepare-agent
konfiguracji celujacoco
- scenariusz nie spełnił mojego drugiego wymagania, IntelliJ IDEA nie mógł znaleźć agenta dla jmockit, którego używam w projekcie do mockowania metod statycznychźródło
Dodałem projekt Maven / Java z 1 klasą domeny z następującymi funkcjami:
Gdzie są wyniki Jacoco? Po przetestowaniu i uruchomieniu „mvn clean” wyniki można znaleźć w „target / site / jacoco / index.html”. Otwórz ten plik w przeglądarce.
Cieszyć się!
Starałem się, aby projekt był jak najprostszy. Projekt łączy wiele sugestii z tych postów w przykładowym projekcie. Dziękuję, współautorzy!
źródło
Walczyłem przez wiele dni. Wypróbowałem wszystkie różne konfiguracje sugerowane w tym wątku. Żaden z nich nie działa. Wreszcie uważam, że tylko ważna konfiguracja jest celem przygotowania agenta . Ale musisz umieścić to we właściwej fazie. Widziałem tak wiele przykładów umieszczających go w „ teście przed integracją ”, co jest mylące, ponieważ zostanie wykonany dopiero po teście jednostkowym. Więc test jednostkowy nie będzie instrumentowany.
Właściwa konfiguracja powinna po prostu używać domyślnej fazy (nie określaj fazy jawnie). I zwykle nie musisz gromadzić się wokół wtyczki maven-surefire-plugin .
źródło
Wykonanie mówi, że umieszcza dane jacoco w /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec, ale twoja konfiguracja maven szuka danych w $ {basedir} / target / zasięg-raporty / jacoco-jednostka. exec.
źródło
Moja odpowiedź jest bardzo późna, ale dla innych użytkowników W twoim przypadku musisz skonfigurować bezpieczne podłączanie, aby używać konfiguracji agenta wiersza poleceń zapisanej w zmiennej itCoverageAgent. Na przykład
W twojej konfiguracji Mavena jacoco przygotowuje argumenty wiersza poleceń w fazie przygotowania agenta, ale bezpieczna wtyczka nie używa go, więc nie ma pliku danych wykonania.
źródło
Spróbuj użyć:
aby zobaczyć szczegóły dotyczące procesu raportowania.
Skonfigurowałem moje jacoco w ten sposób:
Następnie
mvn jacoco:report -debug
pokazuje go przy użyciu domyślnej konfiguracji, co oznacza, żejacoco.exec
nie ma go w programie~/jacoco.exec
. Błąd mówimissing execution data file
.Po prostu użyj domyślnej konfiguracji:
I wszystko działa dobrze.
źródło
Czasami wykonanie jest uruchamiane za pierwszym razem, a kiedy wykonujemy maven czystą instalację, nie generuje się później. Problem polegał na używaniu true dla właściwości skipMain i skip w wtyczce maven-compiler-plugin głównego pliku pom. Usuń je, jeśli zostały wprowadzone jako część problemu lub sugestii.
źródło
W moim przypadku agent przygotowania miał inną
destFile
konfigurację, ale odpowiednio raport musiał być skonfigurowany zdataFile
, ale tej konfiguracji brakowało. PodataFile
dodaniu zaczął działać dobrze.źródło