Mengapa Tes Java Melewatkan java.net.useSystemProxies
Teruskan opsi penemuan proxy Java yang sensitif terhadap startup ke JVM yang menjalankan tes, bukan hanya ke aplikasi atau peluncur build.
Aplikasi Anda mendeteksi proxy sistem, tetapi tes JUnit tidak. Sebelum mengubah kode deteksi, tentukan JVM mana yang menjalankan setiap proses dan argumen apa yang diterimanya.
JDK mendokumentasikan java.net.useSystemProxies sebagai properti yang diperiksa sekali saat startup. Menetapkannya di dalam metode tes bisa terlalu terlambat untuk mengubah keputusan startup tersebut.
Peluncur aplikasi IDE, pelari tes IDE, Maven itu sendiri, dan proses tes Surefire yang di-fork semuanya dapat memiliki argumen VM yang berbeda. Pengaturan proxy di satu peluncur bukan bukti bahwa peluncur lain meneruskannya.
Periksa konfigurasi proses yang di-fork
argLine Surefire menyediakan opsi JVM baris perintah untuk eksekusi yang di-fork. Opsi startup dapat berada di sana ketika tes berjalan di fork semacam itu:
<argLine>-Djava.net.useSystemProxies=true</argLine>Gabungkan opsi tersebut ke konfigurasi proyek yang ada. Mengganti argLine yang ada dapat membuang agen cakupan atau pengaturan JVM lain yang diperlukan. Jika build tidak menggunakan fork, periksa JVM yang benar-benar menghosting tes sebagai gantinya; argLine didokumentasikan hanya efektif untuk eksekusi yang di-fork.
Properti yang tidak sensitif terhadap startup yang dipasok melalui mekanisme properti kerangka kerja tes memiliki siklus hidup berbeda. Jangan menganggap setiap properti mencapai VM cukup awal hanya karena System.getProperty() mengembalikan string yang diinginkan selama tes.
Untuk tes perutean proxy yang terfokus, klien yang dikonfigurasi secara eksplisit juga dapat mengurangi ketergantungan pada konfigurasi desktop. Java 11+ HttpClient dapat menggunakan HTTP ProxySelector lokal klien untuk tujuan itu. Pertahankan pilihan itu terlihat dalam maksud tes: menguji rute klien dan menguji penemuan proxy sistem operasi adalah pemeriksaan yang berbeda.