Waarom Java-tests java.net.useSystemProxies missen
Geef startgevoelige Java-proxy-detectieopties door aan de JVM die de tests uitvoert, niet alleen aan de toepassing of de build-starter.
Je toepassing detecteert de systeemproxy, maar een JUnit-test niet. Bepaal voordat je de detectiecode wijzigt welke JVM elk proces uitvoert en welke argumenten die heeft gekregen.
De JDK documenteert java.net.useSystemProxies als een eigenschap die één keer bij het opstarten wordt gecontroleerd. Die binnen een testmethode instellen kan te laat zijn om die opstartbeslissing nog te wijzigen.
Een IDE-toepassingsstarter, een IDE-testrunner, Maven zelf en een afgesplitst Surefire-testproces kunnen allemaal andere VM-argumenten hebben. Een proxy-instelling in de ene starter is geen bewijs dat een andere starter die heeft doorgegeven.
Controleer de configuratie van het afgesplitste proces
De argLine van Surefire levert JVM-opdrachtregelopties voor afgesplitste uitvoeringen. Een opstartoptie kan daar thuishoren wanneer de tests in zo'n afsplitsing draaien:
<argLine>-Djava.net.useSystemProxies=true</argLine>Voeg de optie samen met de bestaande configuratie van het project. Het vervangen van een bestaande argLine kan coverage-agents of andere vereiste JVM-instellingen weggooien. Gebruikt de build geen afsplitsing, onderzoek dan in plaats daarvan de JVM die de tests daadwerkelijk host; argLine is gedocumenteerd als alleen effectief voor afgesplitste uitvoeringen.
Een niet-startgevoelige eigenschap die via het eigenschappenmechanisme van een testframework wordt aangeleverd, heeft een andere levenscyclus. Ga er niet van uit dat elke eigenschap de VM vroeg genoeg bereikt, alleen omdat System.getProperty() tijdens de test de gewenste string teruggeeft.
Voor een gerichte proxy-routingtest kan een expliciet geconfigureerde client ook de afhankelijkheid van desktopconfiguratie verminderen. Java 11+ HttpClient kan daarvoor een client-lokale HTTP ProxySelector gebruiken. Houd die keuze zichtbaar in de bedoeling van de test: een clientroute testen en proxy-detectie van het besturingssysteem testen zijn verschillende controles.