Saya menggunakan Maven 3.0.3, JUnit 4.8.1, dan Jacoco 0.6.3.201306030806, dan saya mencoba membuat laporan cakupan pengujian.
Saya memiliki proyek dengan pengujian unit saja, tetapi saya tidak dapat menjalankan laporan, saya berulang kali mendapatkan kesalahan: Skipping JaCoCo execution due to missing execution data file
ketika saya menjalankan:
mvn clean install -P test-coverage
Berikut adalah konfigurasi pom saya:
<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>
Semua pengujian saya berjalan dengan sukses. Berikut beberapa keluaran dari Maven:
[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]
Ada ide konfigurasi apa yang saya lewatkan?
destFile
menghapus dan membiarkannya menulis ke file target / jacoco.exec default.Jawaban:
jacoco-maven-plugin: 0.7.10-SNAPSHOT
Dari jacoco: persiapkan-agen yang mengatakan:
Perhatikan
@{argLine}
yang ditambahkan ke-your -extra -arguments
.Terima kasih Slava Semushin karena memperhatikan perubahan dan melaporkan di komentar .
jacoco-maven-plugin: 0.7.2-SNAPSHOT
Berikut jacoco: persiapkan-agen yang mengatakan:
Anda harus mengubah baris berikut dalam
maven-surefire-plugin
konfigurasi plugin dari (perhatikan bagian${argLine}
dalamnya<argLine>
):untuk
Lakukan juga perubahan yang diperlukan pada plugin lain
maven-failsafe-plugin
dan ganti yang berikut (sekali lagi, perhatikan${argLine}
):untuk
sumber
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. Saya tidak mendeklarasikan maven-surefire-plugin secara eksplisit dan mengatur konfigurasi. Saya hanya menambahkan placeholder argLine di baris perintah maven sepertimvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Sekarang file jacoco.exec dibuat dan laporan cakupan dibuat di sonar.Saya menghadapi sedikit masalah berbeda yang mengembalikan kesalahan yang sama.
Sebenarnya, kesalahan ini muncul karena banyak, banyak alasan. Kami bereksperimen dengan berbagai solusi di Stack Overflow, tetapi menemukan sumber daya ini yang terbaik. Ini meruntuhkan berbagai kemungkinan alasan mengapa Jacoco dapat mengembalikan kesalahan yang sama.
Bagi kami, solusinya adalah dengan menambahkan agen-persiapan ke konfigurasi.
Saya membayangkan sebagian besar pengguna akan mengalaminya karena alasan yang berbeda, jadi lihat sumber daya yang disebutkan di atas!
sumber
**/*Test.java
ketika kelas pengujian saya dinamai*Tests.java
*Test.java
kelas, dan satu metode tes yang diberi anotasi@Test
sehingga Jacoco dapat melakukan sesuatu. 2. Dalam variabel lingkungan Travis untuk proyek saya, jika salah ketikSONART_TOKEN=*****
, harus diberi namaSONAR_TOKEN=*****
. Lihat dokumen Travis di sini , carior define SONAR_TOKEN in your Repository Settings
. Setelah saya memperbaikinya, build berjalan dengan sukses. Anda dapat melihat proyek gitbhub saya yang dimaksud .Mungkin ada kasus di mana beberapa pengaturan argline atau plugin lain di pom mungkin menimpa pengaturan perintah eksekusi jacoco.
argLine diatur ke -
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
Salah satu contohnya
Setelah menghilangkan argLine dari plugin ini, jacoco mulai berfungsi secara normal.
sumber
Anda juga bisa mendapatkan kesalahan "Melewati eksekusi JaCoCo karena file data eksekusi hilang" karena tes yang hilang dalam proyek. Misalnya ketika Anda menjalankan proyek baru dan tidak memiliki file * Test.java sama sekali.
sumber
FWhat tdrury berkata:
ubah konfigurasi plugin Anda menjadi ini:
Edit: Hanya melihat satu hal penting, destFile dan dataFile tampaknya case sensitive jadi seharusnya destFile, bukan destfile.
sumber
Saya tahu pertanyaan ini cukup tua tetapi jika seseorang seperti saya datang ke sini untuk mencari jawaban maka ini mungkin bisa membantu. Saya sudah bisa mengatasi kesalahan di atas dengan ini.
1) Hapus potongan kode di bawah ini dari plugin maven-surefire-plugin
2) Tambahkan tujuan di bawah ini:
sumber
Menemukan masalah yang sama sekarang.
Saya memiliki sebuah kelas bernama
HelloWorld
, dan saya membuat sebuah kelas pengujian untuk itu dinamaiHelloWorldTests
, lalu saya mendapatkan hasilnyaSkipping JaCoCo execution due to missing execution data file.
Saya kemudian mencoba untuk mengubah saya
pom.xml
untuk membuatnya berfungsi, tetapi upaya itu gagal.Akhirnya, saya hanya mengganti nama
HelloWorldTests
menjadiHelloWorldTest
, dan berhasil!Jadi saya rasa, secara default , jacoco hanya mengenali kelas pengujian bernama like
XxxTest
, yang menunjukkan bahwa itu adalah kelas pengujianXxx
. Jadi cukup ganti nama kelas tes Anda ke format ini seharusnya berfungsi!sumber
Saya sudah mencoba semua jawaban tetapi hanya kombinasi saran berikut yang berhasil untuk saya. Mengapa? Saya memiliki persyaratan yang sangat spesifik:
mvn clean verify
(Maven 3.6.0)javaagent
ditentukan dalamsurefire
pluginSolusi - tambahkan
argLine
nilai dalamsurefire
konfigurasi dengan properti maven "penggantian terlambat"@{...}
seperti yang dijelaskan disurefire
FAQ ( konfigurasi tetap saya )Percobaan pertama gagal - tentukan properti jaCoCoArgLine dalam
prepare-agent
konfigurasi tujuanjacoco
- skenario gagal persyaratan kedua saya, IntelliJ IDEA tidak dapat menemukan agen untuk jmockit yang saya gunakan dalam proyek untuk mengejek metode statissumber
Saya telah menambahkan proyek Maven / Java dengan 1 kelas Domain dengan fitur-fitur berikut:
Di mana hasil Jacoco? Setelah menguji dan menjalankan 'mvn clean', Anda dapat menemukan hasilnya di 'target / site / jacoco / index.html'. Buka file ini di browser.
Nikmati!
Saya mencoba untuk membuat proyek ini sesederhana mungkin. Proyek ini menggabungkan banyak saran dari posting ini dalam sebuah proyek contoh. Terima kasih, kontributor!
sumber
Saya berjuang selama berhari-hari. Saya mencoba semua konfigurasi berbeda yang disarankan di utas ini. Tak satu pun dari mereka berhasil. Akhirnya, saya hanya menemukan konfigurasi penting adalah tujuan persiapan-agen . Tapi Anda harus meletakkannya di fase yang benar. Saya melihat begitu banyak contoh yang memasukkannya ke dalam " uji-pra-integrasi ", itu menyesatkan, karena hanya akan dijalankan setelah pengujian unit. Jadi pengujian unit tidak akan diinstrumentasi.
Konfigurasi yang benar sebaiknya hanya menggunakan fase default, (jangan tentukan fase secara eksplisit). Dan biasanya, Anda tidak perlu menggunakan maven-surefire-plugin secara massal .
sumber
Eksekusi mengatakan itu menempatkan data jacoco di /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec tetapi konfigurasi maven Anda mencari data di $ {basedir} / target / coverage-reports / jacoco-unit. eksekutif.
sumber
Tanggapan saya sangat terlambat tetapi untuk pengguna lain Dalam kasus Anda, Anda harus mengkonfigurasi pluging yang tidak aman untuk menggunakan konfigurasi agen baris perintah yang disimpan dalam variabel itCoverageAgent. Sebagai contoh
Dalam konfigurasi maven Anda, jacoco menyiapkan argumen baris perintah dalam fase persiapan-agen, tetapi plugin failafe tidak menggunakannya sehingga tidak ada file data eksekusi.
sumber
Coba gunakan:
untuk melihat detail tentang proses pelaporan Anda.
Saya mengonfigurasi jacoco saya seperti ini:
Kemudian
mvn jacoco:report -debug
menampilkannya menggunakan konfigurasi default, yang artinyajacoco.exec
tidak dalam~/jacoco.exec
. Kesalahan mengatakanmissing execution data file
.Jadi gunakan saja konfigurasi default:
Dan semuanya bekerja dengan baik.
sumber
Kadang-kadang eksekusi dijalankan pertama kali, dan ketika kita melakukan maven clean install, eksekusi tidak dihasilkan setelah itu. Masalahnya adalah menggunakan true untuk skipMain dan melewatkan properti di bawah maven-compiler-plugin dari File pom utama. Hapus mereka jika mereka diperkenalkan sebagai bagian dari masalah atau saran apa pun.
sumber
Dalam kasus saya, agen persiapkan memiliki
destFile
konfigurasi yang berbeda , tetapi karena itu laporan harus dikonfigurasi dengandataFile
, tetapi konfigurasi ini hilang. SetelahdataFile
ditambahkan, itu mulai berfungsi dengan baik.sumber