ทำไมการทดสอบ Java จึงมองไม่เห็น java.net.useSystemProxies
ส่งตัวเลือกการค้นหาพร็อกซีของ Java ที่อ่อนไหวต่อการเริ่มระบบไปยัง JVM ที่รันการทดสอบ ไม่ใช่แค่แอปพลิเคชันหรือตัวเรียก build
แอปพลิเคชันของคุณตรวจพบพร็อกซีของระบบ แต่การทดสอบ JUnit ไม่ตรวจพบ ก่อนแก้ไขโค้ดการตรวจหา ให้ระบุว่า JVM ใดรันแต่ละโปรเซสและได้รับอาร์กิวเมนต์อะไร
JDK ระบุว่า java.net.useSystemProxies เป็นพร็อพเพอร์ตี้ที่ตรวจสอบหนึ่งครั้งตอนเริ่มระบบ การตั้งค่าภายในเมธอดทดสอบอาจสายเกินไปที่จะเปลี่ยนการตัดสินใจตอนเริ่มระบบนั้น
ตัวเรียกแอปพลิเคชันใน IDE, ตัวรันการทดสอบใน IDE, Maven เอง และโปรเซสทดสอบ Surefire ที่แยกสาขา อาจมีอาร์กิวเมนต์ VM ต่างกัน การตั้งค่าพร็อกซีในตัวเรียกหนึ่งไม่ใช่หลักฐานว่าตัวเรียกอื่นส่งต่อไป
ตรวจสอบการกำหนดค่าของโปรเซสที่แยกสาขา
argLine ของ Surefire ให้ตัวเลือก JVM บนบรรทัดคำสั่งสำหรับการรันที่แยกสาขา ตัวเลือกเริ่มระบบอาจอยู่ที่นั่นเมื่อการทดสอบรันในสาขาดังกล่าว:
<argLine>-Djava.net.useSystemProxies=true</argLine>รวมตัวเลือกเข้ากับการกำหนดค่าที่มีอยู่ของโปรเจกต์ การแทนที่ argLine ที่มีอยู่อาจทำให้ตัวแทนวัดความครอบคลุมหรือการตั้งค่า JVM อื่นที่จำเป็นถูกทิ้งไป หาก build ไม่ใช้สาขาใดเลย ให้ตรวจสอบ JVM ที่โฮสต์การทดสอบจริงแทน; argLine มีบันทึกว่ามีผลเฉพาะการรันที่แยกสาขา
พร็อพเพอร์ตี้ที่ไม่ไวต่อการเริ่มระบบและจัดหาโดยกลไกพร็อพเพอร์ตี้ของเฟรมเวิร์กทดสอบมีวงจรชีวิตต่างกัน อย่าสันนิษฐานว่าทุกพร็อพเพอร์ตี้ไปถึง VM เร็วพอเพียงเพราะ System.getProperty() คืนสตริงที่ต้องการระหว่างการทดสอบ
สำหรับการทดสอบการกำหนดเส้นทางพร็อกซีแบบเจาะจง ไคลเอนต์ที่กำหนดค่าไว้อย่างชัดเจนยังช่วยลดการพึ่งพาการกำหนดค่าเดสก์ท็อปได้ Java 11+ HttpClient สามารถใช้ HTTP ProxySelector ภายในไคลเอนต์ เพื่อการนั้น เก็บตัวเลือกนั้นให้เห็นในเจตนาของการทดสอบ: การทดสอบเส้นทางไคลเอนต์และการทดสอบการค้นหาพร็อกซีของระบบปฏิบัติการเป็นการตรวจสอบที่ต่างกัน