Ihre Anwendung erkennt den Systemproxy, ein JUnit-Test jedoch nicht. Bevor Sie den Erkennungscode ändern, stellen Sie fest, welche JVM welchen Prozess ausführt und welche Argumente sie erhalten hat.

Das JDK dokumentiert java.net.useSystemProxies als eine Eigenschaft, die beim Start einmal geprüft wird. Sie innerhalb einer Testmethode zu setzen, kann zu spät sein, um diese Startentscheidung noch zu ändern.

Ein IDE-Anwendungsstarter, ein IDE-Testrunner, Maven selbst und ein abgezweigter Surefire-Testprozess können alle unterschiedliche VM-Argumente haben. Eine Proxy-Einstellung in einem Starter ist kein Beleg dafür, dass ein anderer Starter sie weitergegeben hat.

Konfiguration des abgezweigten Prozesses prüfen

Surefires argLine liefert JVM-Kommandozeilenoptionen für abgezweigte Ausführungen. Eine Startoption kann dort hingehören, wenn die Tests in einer solchen Abzweigung laufen:

<argLine>-Djava.net.useSystemProxies=true</argLine>

Führen Sie die Option mit der vorhandenen Konfiguration des Projekts zusammen. Das Ersetzen einer vorhandenen argLine kann Coverage-Agenten oder andere erforderliche JVM-Einstellungen verwerfen. Verwendet der Build keine Abzweigung, untersuchen Sie stattdessen die JVM, die die Tests tatsächlich hostet; argLine ist dokumentiert als nur für abgezweigte Ausführungen wirksam.

Eine nicht startabhängige Eigenschaft, die über den Eigenschaftsmechanismus eines Testframeworks bereitgestellt wird, hat einen anderen Lebenszyklus. Gehen Sie nicht davon aus, dass jede Eigenschaft die VM früh genug erreicht, nur weil System.getProperty() während des Tests den gewünschten String zurückgibt.

Für einen gezielten Proxy-Routing-Test kann ein explizit konfigurierter Client auch die Abhängigkeit von der Desktop-Konfiguration verringern. Java 11+ HttpClient kann dafür einen clientlokalen HTTP ProxySelector verwenden. Halten Sie diese Wahl in der Absicht des Tests sichtbar: Einen Client-Pfad zu testen und die Proxy-Erkennung des Betriebssystems zu testen, sind unterschiedliche Prüfungen.

Ähnliche Artikel