Miért nem látják a Java tesztek a java.net.useSystemProxies beállítást
A indításkor érzékeny Java proxyfelderítési beállításokat a teszteket futtató JVM-nek adja át, ne csak az alkalmazásnak vagy a build indítójának.
Az alkalmazás felismeri a rendszer proxyt, a JUnit teszt viszont nem. Mielőtt módosítja a felderítő kódot, állapítsa meg, melyik JVM futtatja az egyes folyamatokat, és milyen argumentumokat kapott.
A JDK a java.net.useSystemProxies tulajdonságot indításkor egyszer ellenőrzött tulajdonságként dokumentálja. Egy tesztmódszeren belüli beállítása túl késő lehet ahhoz, hogy megváltoztassa ezt az indítási döntést.
Az IDE alkalmazásindító, az IDE tesztfuttató, maga a Maven és egy elágaztatott Surefire tesztfolyamat mind különböző VM argumentumokkal rendelkezhet. Az egyik indítóban beállított proxy nem bizonyítja, hogy egy másik indító továbbadta.
Ellenőrizze az elágaztatott folyamat konfigurációját
A Surefire argLine parancssori JVM-beállításokat ad az elágaztatott végrehajtásokhoz. Egy indítási beállítás ott lehet a helyén, amikor a tesztek ilyen elágazásban futnak:
<argLine>-Djava.net.useSystemProxies=true</argLine>Vontassa össze a beállítást a projekt meglévő konfigurációjával. Egy meglévő argLine lecserélése elvetheti a lefedettségi ügynököket vagy más szükséges JVM-beállításokat. Ha a build nem használ elágazást, vizsgálja meg inkább azt a JVM-et, amely ténylegesen futtatja a teszteket; az argLine dokumentáltan csak elágaztatott végrehajtásoknál hatékony.
A tesztkeretrendszer tulajdonságmechanizmusán keresztül biztosított, indításra nem érzékeny tulajdonságnak más az életciklusa. Ne feltételezze, hogy minden tulajdonság elég korán eléri a VM-et csak azért, mert a System.getProperty() a teszt során visszaadja a kívánt karakterláncot.
Egy célzott proxy-útválasztási teszthez egy kifejezetten konfigurált kliens az asztali konfigurációtól való függést is csökkentheti. A Java 11+ HttpClient erre klienshelyi HTTP ProxySelector használható. Tartsa ezt a választást láthatóvá a teszt szándékában: az ügyfélútvonal tesztelése és az operációs rendszer proxyfelderítésének tesztelése különböző ellenőrzések.