Saya memiliki beberapa unit test Junit yang membutuhkan banyak ruang untuk dijalankan - yaitu 1G. (Mereka menguji fungsionalitas intensif memori untuk aplikasi webstart yang hanya akan berjalan dengan ruang heap yang cukup, dan akan dijalankan secara internal pada mesin Win 7 64-bit - jadi mendesain ulang pengujian bukanlah saran praktis.)
Saya mengembangkan di Intellij IDEA, jadi saya tahu saya dapat mengatur parameter JVM (misalnya -Xmx1024M) untuk kelas pengujian. Namun, ini hanya untuk menjalankan seluruh kelas pengujian - jika saya ingin menjalankan pengujian individu, saya harus membuat ulang konfigurasi proses untuk metode pengujian tersebut.
Juga, itu adalah IDE dan khusus kotak - jadi jika saya mengganti kotak (saya mengembangkan di beberapa mesin) atau salah satu rekan saya mencoba menjalankan tes, pengaturan itu tidak ditransfer. (Juga, IDE lain seperti Eclipse dan NetBeans digunakan oleh kolega saya.) FWIW, kami menggunakan lincah untuk kontrol kode sumber.
Untuk siklus pembuatan, kami menggunakan Maven, jadi saya tahu cara menentukan parameter JVM untuk itu.
Jadi: - Saya sedang mencari cara untuk menentukan parameter JVM yang akan diterapkan untuk seluruh kelas pengujian dan metode pengujian individu; dan - Saya ingin membagikan spesifikasi tersebut di seluruh IDE pada mesin apa pun (setelah mengambil kode dari repositori).
sumber
Jawaban:
Di IntelliJ Anda dapat menentukan pengaturan default untuk setiap konfigurasi proses. Dalam dialog konfigurasi Run / Debug (yang Anda gunakan untuk mengonfigurasi heap per pengujian) klik Default dan JUnit . Pengaturan ini akan secara otomatis diterapkan ke setiap konfigurasi pengujian JUnit baru. Saya kira pengaturan serupa ada untuk Eclipse.
Namun tidak ada pilihan sederhana untuk mentransfer pengaturan tersebut (setidaknya di IntelliJ) lintas lingkungan. Anda dapat memasukkan file proyek IntelliJ ke repositori Anda: ini mungkin berhasil, tetapi saya tidak merekomendasikannya.
Anda tahu cara menyetelnya
maven-surefire-plugin
. Baik. Ini adalah cara yang paling portabel (lihat jawaban Ptomli sebagai contoh).Selebihnya - Anda harus ingat bahwa kasus uji JUnit hanyalah sekumpulan kelas Java, bukan program mandiri. Terserah runner (biarkan runner JUnit mandiri, IDE Anda,
maven-surefire-plugin
untuk menyetel opsi tersebut. Dengan kata lain, tidak ada cara "portabel" untuk menyetelnya, sehingga setelan memori diterapkan apa pun ke runner.Sebagai contoh: Anda tidak dapat menentukan
Xmx
parameter saat mengembangkan servlet - tergantung wadah untuk mendefinisikannya. Anda tidak bisa mengatakan: "servlet ini harus selalu dijalankan denganXmx=1G
.sumber
Di Maven Anda dapat mengkonfigurasi plugin yang pasti
Jika Anda menggunakan Maven untuk build, konfigurasi ini akan dijalankan di pohon sumber dan diterapkan saat pengujian dilakukan. Lihat dokumentasi Plugin Maven Surefire .
sumber
-Xmx256M
diteruskan ke baris perintah Java saat menjalankan pengujian unit Anda langsung dari IntelliJ. Ini baru saja membuatku bingung :-(Parameter juga dapat disetel dengan cepat.
Lihat http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
sumber
Menurut pertanyaan dukungan ini https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
argumen -Xmx untuk uji coba junit IntelliJ akan datang dari maven-surefire-plugin, jika disetel.
Potongan pom.xml ini
tampaknya meneruskan argumen -Xmx1024 ke uji coba junit, dengan IntelliJ 2016.2.4.
sumber
Saya setuju dengan orang lain yang mengatakan bahwa tidak ada cara sederhana untuk mendistribusikan pengaturan ini.
Untuk Eclipse: minta kolega Anda untuk menyetel berikut ini:
-Xmx1024m
Setelah itu semua tes akan berjalan
-Xmx1024m
tetapi sayangnya Anda telah mengaturnya di setiap instalasi Eclipse. Mungkin Anda bisa membuat paket Eclipse kustom yang berisi pengaturan ini dan memberikannya kepada Anda rekan kerja.Proses kerja berikut juga dapat membantu: Jika IDE tidak dapat menjalankan tes, pengembang harus memeriksa apakah Maven dapat menjalankan tes ini atau tidak.
sumber
Anda dapat menggunakan systemPropertyVariables (java.protocol.handler.pkgs adalah nama argumen JVM Anda):
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
sumber
Alternatif khusus gerhana yang terbatas pada parameter JVM java.library.path memungkinkan untuk menyetelnya untuk folder sumber tertentu, bukan untuk seluruh jdk seperti yang diusulkan dalam respons lain:
Bagi mereka yang tertarik dengan detail tentang mengapa maven argline tag harus diutamakan daripada systemProperties, lihat, misalnya:
Ambil file JNI asli di pengujian Maven (lwjgl)
sumber
Jika Anda mengaturnya dalam kode Java, Anda dapat mengaturnya seperti ini
referensi:
https://stackoverflow.com/a/60654275/4712855
https://stackoverflow.com/a/10774432/4712855
sumber