Prečo testy Javy prehliadajú java.net.useSystemProxies
Odovzdajte voľby zisťovania proxy v Jave citlivé na spustenie JVM, ktorý testy spúšťa, nie iba aplikácii alebo spúšťaču zostavenia.
Vaša aplikácia zistí systémovú proxy, ale test JUnit nie. Skôr než zmeníte kód zisťovania, určte, ktorý JVM spúšťa každý proces a aké argumenty dostal.
JDK dokumentuje java.net.useSystemProxies ako vlastnosť, ktorá sa kontroluje raz pri spustení. Nastavenie vnútri testovacej metódy môže byť príliš neskoro na zmenu tohto rozhodnutia pri spustení.
Spúšťač aplikácie v IDE, testovací runner IDE, samotný Maven a odštiepený testovací proces Surefire môžu mať rôzne argumenty VM. Nastavenie proxy v jednom spúšťači nie je dôkazom, že ho iný spúšťač odovzdal.
Skontrolujte konfiguráciu odštiepeného procesu
argLine v Surefire poskytuje JVM voľby príkazového riadka pre odštiepené spustenia. Voľba spustenia tam môže patriť, keď testy bežia v takom odštiepení:
<argLine>-Djava.net.useSystemProxies=true</argLine>Zlúčte voľbu s existujúcou konfiguráciou projektu. Nahradenie existujúceho argLine môže zahodiť agentov pokrytia alebo iné požadované nastavenia JVM. Ak zostavenie odštiepenie nepoužíva, preskúmajte namiesto toho JVM, ktorý testy skutočne hostuje; argLine je dokumentovaný ako účinný iba pre odštiepené spustenia.
Vlastnosť necitlivá na spustenie dodaná mechanizmom vlastností testovacieho rámca má iný životný cyklus. Nepredpokladajte, že každá vlastnosť dorazí do VM dostatočne skoro len preto, že System.getProperty() počas testu vracia požadovaný reťazec.
Pre cielený test smerovania cez proxy môže explicitne nakonfigurovaný klient tiež znížiť závislosť od konfigurácie pracovnej plochy. Java 11+ HttpClient na to môže použiť HTTP ProxySelector lokálny pre klienta. Udržujte túto voľbu viditeľnú v zámere testu: testovanie klientskej trasy a testovanie zisťovania proxy operačného systému sú rôzne kontroly.