De ce testele Java ratează java.net.useSystemProxies
Transmite opțiunile de descoperire a proxy-ului Java sensibile la pornire către JVM-ul care rulează testele, nu doar către aplicație sau lansatorul de build.
Aplicația ta detectează proxy-ul de sistem, dar un test JUnit nu. Înainte de a modifica codul de detectare, stabiliți ce JVM rulează fiecare proces și ce argumente a primit.
JDK-ul documentează java.net.useSystemProxies ca o proprietate verificată o singură dată la pornire. Setarea ei în interiorul unei metode de test poate fi prea târzie pentru a schimba acea decizie de pornire.
Un lansator de aplicație din IDE, un runner de teste din IDE, Maven însuși și un proces de teste Surefire bifurcat pot avea cu toții argumente VM diferite. O setare de proxy într-un lansator nu este dovada că alt lansator a transmis-o.
Verificați configurația procesului bifurcat
argLine din Surefire oferă opțiuni JVM din linia de comandă pentru execuțiile bifurcate. O opțiune de pornire poate aparține acolo când testele rulează într-o astfel de bifurcație:
<argLine>-Djava.net.useSystemProxies=true</argLine>Îmbinați opțiunea cu configurația existentă a proiectului. Înlocuirea unui argLine existent poate elimina agenți de acoperire sau alte setări JVM necesare. Dacă build-ul nu folosește nicio bifurcație, inspectați în schimb JVM-ul care găzduiește efectiv testele; argLine este documentat ca eficient doar pentru execuțiile bifurcate.
O proprietate care nu este sensibilă la pornire și este furnizată prin mecanismul de proprietăți al unui framework de testare are un ciclu de viață diferit. Nu presupuneți că fiecare proprietate ajunge la VM suficient de devreme doar pentru că System.getProperty() returnează șirul dorit în timpul testului.
Pentru un test țintit de rutare prin proxy, un client configurat explicit poate reduce și dependența de configurația desktopului. Java 11+ HttpClient poate folosi în acest scop un HTTP ProxySelector local clientului. Păstrați această alegere vizibilă în intenția testului: testarea unei rute de client și testarea descoperirii proxy-ului de către sistemul de operare sunt verificări diferite.