Zašto Java testovi promašuju java.net.useSystemProxies
Proslijedite opcije Java otkrivanja proxyja osjetljive na pokretanje JVM-u koji izvršava testove, a ne samo aplikaciji ili pokretaču builda.
Vaša aplikacija otkriva sistemski proxy, ali JUnit test ne. Prije nego što promijenite kod za otkrivanje, utvrdite koji JVM pokreće svaki proces i koje je argumente primio.
JDK dokumentira java.net.useSystemProxies kao svojstvo koje se provjerava jednom pri pokretanju. Postavljanje unutar testne metode može biti prekasno da promijeni tu odluku pri pokretanju.
Pokretač aplikacije u IDE-u, IDE izvršavač testova, sam Maven i razdvojeni Surefire test proces mogu imati različite VM argumente. Postavka proxyja u jednom pokretaču nije dokaz da ju je drugi pokretač prenio.
Provjerite konfiguraciju razdvojenog procesa
Surefireov argLine daje JVM opcije naredbenog retka za razdvojena izvršavanja. Opcija pokretanja može pripadati tamo kada se testovi izvršavaju u takvom razdvajanju:
<argLine>-Djava.net.useSystemProxies=true</argLine>Spojite opciju s postojećom konfiguracijom projekta. Zamjena postojećeg argLine može odbaciti agente pokrivenosti ili druge potrebne JVM postavke. Ako build ne koristi razdvajanje, umjesto toga pregledajte JVM koji doista hosta testove; argLine je dokumentiran kao učinkovit samo za razdvojena izvršavanja.
Svojstvo koje nije osjetljivo na pokretanje, a dostavljeno kroz mehanizam svojstava testnog okvira, ima drugačiji životni ciklus. Ne pretpostavljajte da svako svojstvo stiže do VM-a dovoljno rano samo zato što System.getProperty() vraća željeni niz tijekom testa.
Za fokusiran test usmjeravanja proxyja, eksplicitno konfiguriran klijent također može smanjiti ovisnost o konfiguraciji radne površine. Java 11+ HttpClient može u tu svrhu koristiti HTTP ProxySelector lokalni za klijenta. Neka taj izbor bude vidljiv u namjeri testa: testiranje klijentske rute i testiranje otkrivanja proxyja operacijskog sustava različite su provjere.