Kāpēc Java testi nepamana java.net.useSystemProxies
Nododiet startam jutīgos Java starpniekservera noteikšanas opcijas testus izpildošajai JVM, ne tikai lietojumprogrammai vai build palaidējam.
Jūsu lietojumprogramma nosaka sistēmas starpniekserveri, bet JUnit tests to nenosaka. Pirms noteikšanas koda maiņas noskaidrojiet, kura JVM izpilda katru procesu un kādus argumentus tā saņēma.
JDK dokumentē java.net.useSystemProxies kā rekvizītu, kas tiek pārbaudīts vienreiz startēšanas laikā. Tā iestatīšana testa metodē var būt pārāk vēla, lai mainītu šo startēšanas lēmumu.
IDE lietojumprogrammas palaidējam, IDE testu izpildītājam, pašam Maven un atdalītam Surefire testa procesam var būt dažādi VM argumenti. Starpniekservera iestatījums vienā palaidējā nav pierādījums, ka cits palaidējs to nodeva tālāk.
Pārbaudiet atdalītā procesa konfigurāciju
Surefire argLine nodrošina komandrindas JVM opcijas atdalītām izpildēm. Starta opcija var piederēt tur, ja testi darbojas šādā atzarojumā:
<argLine>-Djava.net.useSystemProxies=true</argLine>Apvienojiet opciju ar esošo projekta konfigurāciju. Esoša argLine aizstāšana var izmest pārklājuma aģentus vai citus nepieciešamos JVM iestatījumus. Ja build neizmanto atzarojumu, tā vietā pārbaudiet JVM, kas faktiski mitina testus; argLine ir dokumentēta kā efektīva tikai atdalītām izpildēm.
Rekvizītam, kas nav jutīgs pret startēšanu un tiek nodrošināts ar testu ietvara rekvizītu mehānismu, ir cits dzīves cikls. Nepieņemiet, ka katrs rekvizīts sasniedz VM pietiekami agri tikai tāpēc, ka System.getProperty() testa laikā atgriež vajadzīgo virkni.
Mērķētam starpniekservera maršrutēšanas testam skaidri konfigurēts klients var arī samazināt atkarību no darbvirsmas konfigurācijas. Java 11+ HttpClient šim nolūkam var izmantot klientam lokālu HTTP ProxySelector. Saglabājiet šo izvēli redzamu testa nolūkā: klienta maršruta testēšana un operētājsistēmas starpniekservera noteikšanas testēšana ir dažādas pārbaudes.