Aplikasi anda mengesan proksi sistem, tetapi ujian JUnit tidak. Sebelum menukar kod pengesanan, tentukan JVM mana yang menjalankan setiap proses dan argumen apa yang diterimanya.

JDK mendokumenkan java.net.useSystemProxies sebagai sifat yang diperiksa sekali semasa permulaan. Menetapkannya di dalam kaedah ujian mungkin terlalu lewat untuk mengubah keputusan permulaan itu.

Pelancar aplikasi IDE, pelari ujian IDE, Maven sendiri dan proses ujian Surefire yang di-fork semuanya boleh mempunyai argumen VM yang berbeza. Tetapan proksi dalam satu pelancar bukan bukti bahawa pelancar lain telah menghantarnya.

Periksa konfigurasi proses yang di-fork

argLine Surefire menyediakan pilihan JVM baris arahan untuk pelaksanaan yang di-fork. Pilihan permulaan boleh berada di situ apabila ujian berjalan dalam fork sedemikian:

<argLine>-Djava.net.useSystemProxies=true</argLine>

Gabungkan pilihan itu ke dalam konfigurasi sedia ada projek. Menggantikan argLine sedia ada boleh membuang agen liputan atau tetapan JVM lain yang diperlukan. Jika build tidak menggunakan fork, periksa JVM yang benar-benar menghos ujian sebaliknya; argLine didokumenkan sebagai berkesan hanya untuk pelaksanaan yang di-fork.

Sifat yang tidak sensitif kepada permulaan yang dibekalkan melalui mekanisme sifat rangka kerja ujian mempunyai kitaran hayat yang berbeza. Jangan andaikan setiap sifat mencapai VM cukup awal hanya kerana System.getProperty() mengembalikan rentetan yang dikehendaki semasa ujian.

Untuk ujian penghalaan proksi yang fokus, klien yang dikonfigurasi secara eksplisit juga boleh mengurangkan pergantungan pada konfigurasi desktop. Java 11+ HttpClient boleh menggunakan HTTP ProxySelector setempat klien untuk tujuan itu. Kekalkan pilihan itu kelihatan dalam niat ujian: menguji laluan klien dan menguji penemuan proksi sistem pengendalian ialah pemeriksaan yang berbeza.

Artikel berkaitan