Bakit hindi nakikita ng mga Java test ang java.net.useSystemProxies
Ipasa ang mga opsyon sa pagtuklas ng proxy ng Java na sensitibo sa startup sa JVM na nagpapatakbo ng mga test, hindi lang sa application o build launcher.
Natutukoy ng iyong application ang system proxy, ngunit hindi ito natutukoy ng isang JUnit test. Bago baguhin ang code ng pagtuklas, alamin kung aling JVM ang nagpapatakbo ng bawat proseso at kung anong mga argumento ang natanggap nito.
Itinatala ng JDK ang java.net.useSystemProxies bilang property na sinusuri nang isang beses sa startup. Ang pagtatakda nito sa loob ng isang test method ay maaaring huli na para baguhin ang desisyong iyon sa startup.
Ang isang IDE application launcher, isang IDE test runner, ang Maven mismo, at isang forked na Surefire test process ay maaaring may magkakaibang VM argument. Ang isang proxy setting sa isang launcher ay hindi patunay na ipinasa ito ng ibang launcher.
Suriin ang configuration ng forked na proseso
Ang argLine ng Surefire ay nagbibigay ng command-line JVM option para sa forked na execution. Maaaring naroon ang startup option kapag tumatakbo ang mga test sa ganoong fork:
<argLine>-Djava.net.useSystemProxies=true</argLine>Pagsamahin ang opsyon sa umiiral nang configuration ng proyekto. Ang pagpapalit ng umiiral nang argLine ay maaaring magtapon ng coverage agent o iba pang kinakailangang JVM setting. Kung hindi gumagamit ng fork ang build, suriin sa halip ang JVM na talagang nagho-host ng mga test; ang argLine ay nakatala bilang epektibo lamang para sa forked na execution.
Ang property na hindi sensitibo sa startup na ibinibigay sa pamamagitan ng property mechanism ng isang test framework ay may ibang life cycle. Huwag ipagpalagay na ang bawat property ay umaabot sa VM nang maaga dahil lang ibinabalik ng System.getProperty() ang gustong string habang tumatakbo ang test.
Para sa isang nakatutok na proxy-routing test, ang isang tahasang naka-configure na client ay makakabawas din ng pagdepende sa desktop configuration. Maaaring gumamit ang Java 11+ HttpClient ng HTTP ProxySelector na lokal sa client para sa layuning iyon. Panatilihing nakikita ang pagpipiliang iyon sa layunin ng test: ang pagsubok ng ruta ng client at ang pagsubok ng pagtuklas ng proxy ng operating system ay magkaibang pagsusuri.