Maven melewatkan tes


226

Saya menggunakan Maven 2.2.1 dan untuk membangun proyek saya, saya menggunakan perintah ini

mvn clean install -Dmaven.test.skip=true

Namun, bangunan gagal mengatakan tidak dapat menemukan salah satu artefak. Namun, ketika saya menggunakan:

mvn clean install -DskipTests

semuanya bekerja dengan baik.

Sejauh ini saya telah berpikir bahwa 2 perintah ini setara. Namun, tautan ini tampaknya menunjukkan bahwa -Dmaven.test.skip=truejuga melewatkan kompilasi kasus uji.

Namun, itu masih belum menjelaskan kepada saya mengapa satu perintah berfungsi dan yang lainnya tidak. Akan berterima kasih jika ada yang menjelaskan ini padaku.


1
Versi maven-surefire-plugin apa yang Anda gunakan? Apakah sama dengan versi doc yang Anda baca?
gerrytan

2
Satu lompatan bangunan, lompatan lainnya berjalan. Jika Anda ingin keduanya gunakan keduanya.
Elliott Frisch

1
Bisakah Anda memberikan rincian kegagalan - pesan kesalahan atau stacktrace?
Raghuram

1
Mengapa Anda menggunakan versi Maven yang lebih tua yang sudah ditentukan EOL .
khmarbaise

1
Jadi benarkah untuk benar-benar melewati semua tes terkait yang harus saya gunakan -Dmaven.test.skip=true -DskipTests? Satu atau yang lain kadang-kadang dapat dihilangkan, tergantung pada keadaan, tetapi siapa yang ingin memikirkan hal itu ..
Landon Kuhn

Jawaban:


121

Seperti yang Anda catat, -Dmaven.test.skip=truelompati saat menyusun tes. Lebih penting lagi, itu melompat membangun artefak tes. Praktik umum untuk proyek-proyek besar adalah memiliki utilitas pengujian dan kelas dasar dibagi di antara modul-modul dalam proyek yang sama.

Ini dicapai dengan memiliki modul yang membutuhkan test-jarmodul yang dibangun sebelumnya:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

Jika -Dmaven.test.skip=true(atau hanya -Dmaven.test.skip) ditentukan, test-jars tidak dibangun, dan modul apa pun yang bergantung padanya akan gagal dibangun.

Sebaliknya, ketika Anda menggunakan -DskipTests, Maven tidak menjalankan tes, tetapi ia mengkompilasi dan membangun tabung tes, membuatnya tersedia untuk modul-modul berikutnya.


2
Bagaimana cara mengatasi masalah ini? Sebagai perintah pakar online saya, gunakan -Dmaven.test.skip.
neptune

2
@neptune masalah apa? Jika Anda memiliki pertanyaan baru, silakan gunakan posting baru untuk menanyakannya.
Mureinik

58

Saya memiliki beberapa ketergantungan dengan tes untuk membangun paket.

Perintah berikut ini berhasil menimpa kebutuhan artefak uji untuk menyelesaikan tujuan:

mvn -DskipTests=true  package

29

Ada perbedaan antara setiap parameter.

  • The -DskipTests melewati fase tes yang sedang berjalan, artinya pada akhir proses ini Anda akan dikompilasi.

  • The -Dmaven.test.skip = true melewatkan tahap kompilasi dan menjalankan tes.

Sebagai parameter -Dmaven.test.skip = true skip compiling, Anda tidak memiliki artefak tes.

Untuk informasi lebih lanjut, baca dokumentasi surfire: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html


15

Saya bisa memberi Anda contoh yang menghasilkan masalah yang sama, tetapi mungkin tidak memberi Anda jawaban untuk pertanyaan Anda. (Selain itu, dalam contoh ini, saya menggunakan pengetahuan Maven 3 saya, yang mungkin tidak berlaku untuk Maven 2.)

Dalam proyek maven multi-modul (berisi modul Adan B, di mana Btergantung pada A), Anda dapat menambahkan juga ketergantungan tes pada Adari B.

Ketergantungan ini dapat terlihat sebagai berikut:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(untuk informasi lebih lanjut, lihat https://maven.apache.org/guides/mini/guide-attached-tests.html )
Perhatikan bahwa proyek Amenghasilkan artefak sekunder dengan penggolong di testsmana kelas uji dan sumber daya pengujian berada.

Jika Anda membangun proyek Anda dengan -Dmaven.test.skip=true, Anda akan mendapatkan kesalahan resolusi ketergantungan selama artefak tes tidak ditemukan di repo lokal Anda atau repositori eksternal. Alasannya adalah bahwa kelas tes tidak dikompilasi atau testsartifak diproduksi.
Namun, jika Anda menjalankan build Anda dengan artefak -DskipTestsAnda testsakan diproduksi (meskipun tes tidak akan berjalan) dan ketergantungan akan diselesaikan.


10

Untuk melewatkan test case selama instalasi maven clean saya menggunakan paramater -DskipTests dalam perintah berikut

mvn clean install -DskipTests

ke jendela terminal


9

Parameter -DskipTests mungkin tidak berfungsi tergantung pada versi plugin pasti Anda.

Anda dapat menggunakan "-Dmaven.test.skip.exec" sebagai ganti "-DskipTests"

Sumber: Rincian Parameter Surefire


1

Selama kompilasi pakar, Anda dapat melewati eksekusi pengujian dengan menambahkan plugin berikut di pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>

1
Itu melewatkan tes bahkan ketika Anda melakukannyamvn test
Pratik Singhal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.