Miks Java testid ei märka java.net.useSystemProxies'it
Edasta käivitustundlikud Java puhverserveri tuvastamise valikud testide käitamiseks kasutatavale JVM-ile, mitte ainult rakendusele või build-käivitajale.
Sinu rakendus tuvastab süsteemse puhverserveri, kuid JUnit test mitte. Enne tuvastuskoodi muutmist tee kindlaks, milline JVM käitab iga protsessi ja millised argumendid see sai.
JDK dokumenteerib java.net.useSystemProxies omadusena, mida kontrollitakse käivitamisel üks kord. Selle seadistamine testimeetodi sees võib olla selle käivitamisotsuse muutmiseks liiga hilja.
IDE rakenduse käivitaja, IDE testijooksja, Maven ise ja hargnenud Surefire'i testiprotsess võivad kõik omada erinevaid VM-argumente. Puhverserveri seadistus ühes käivitajas ei tõenda, et teine käivitaja selle edasi andis.
Kontrolli hargnenud protsessi konfiguratsiooni
Surefire'i argLine annab hargnenud täitmiste jaoks käsurea JVM-valikud. Käivitusvalik võib sinna kuuluda, kui testid jooksevad sellises harus:
<argLine>-Djava.net.useSystemProxies=true</argLine>Ühenda valik projekti olemasoleva konfiguratsiooniga. Olemasoleva argLine'i asendamine võib kaotada katvusagendid või muud vajalikud JVM-seaded. Kui build haru ei kasuta, uuri selle asemel JVM-i, mis testid tegelikult majutab; argLine on dokumenteeritud kui tõhus ainult hargnenud täitmiste puhul.
Testiraamistiku omadusmehhanismi kaudu antud mitte-käivitustundlikul omadusel on erinev elutsükkel. Ära eelda, et iga omadus jõuab VM-i piisavalt vara ainult seetõttu, et System.getProperty() tagastab testi ajal soovitud stringi.
Keskendatud puhverserveri marsruuditesti jaoks võib ka selgesõnaliselt konfigureeritud klient vähendada sõltuvust töölaua konfiguratsioonist. Java 11+ HttpClient saab selleks kasutada kliendipõhist HTTP ProxySelectorit. Hoia see valik testi kavatsuses nähtav: kliendi marsruudi testimine ja operatsioonisüsteemi puhverserveri tuvastamise testimine on erinevad kontrollid.