Vì sao các bài kiểm thử Java không thấy java.net.useSystemProxies
Hãy truyền các tuỳ chọn dò proxy Java nhạy cảm với lúc khởi động cho JVM chạy kiểm thử, chứ không chỉ cho ứng dụng hay trình khởi chạy build.
Ứng dụng của bạn phát hiện proxy hệ thống, nhưng một bài kiểm thử JUnit thì không. Trước khi sửa mã phát hiện, hãy xác định JVM nào chạy từng tiến trình và những đối số nào nó nhận được.
JDK ghi nhận java.net.useSystemProxies là thuộc tính chỉ được kiểm tra một lần lúc khởi động. Đặt nó bên trong một phương thức kiểm thử có thể là quá muộn để thay đổi quyết định khởi động đó.
Trình khởi chạy ứng dụng trong IDE, trình chạy kiểm thử của IDE, bản thân Maven và tiến trình kiểm thử Surefire được tách nhánh đều có thể có các đối số VM khác nhau. Một thiết lập proxy trong một trình khởi chạy không phải bằng chứng rằng trình khởi chạy khác đã truyền nó đi.
Kiểm tra cấu hình của tiến trình được tách nhánh
argLine của Surefire cung cấp các tuỳ chọn JVM trên dòng lệnh cho các lần thực thi được tách nhánh. Tuỳ chọn khởi động có thể thuộc về đó khi các bài kiểm thử chạy trong nhánh như vậy:
<argLine>-Djava.net.useSystemProxies=true</argLine>Hợp nhất tuỳ chọn vào cấu hình hiện có của dự án. Việc thay thế một argLine hiện có có thể làm mất các agent đo độ phủ hoặc các thiết lập JVM cần thiết khác. Nếu build không dùng nhánh nào, hãy kiểm tra JVM thực sự lưu trữ các bài kiểm thử thay vào đó; argLine được ghi nhận là chỉ có hiệu lực cho các lần thực thi được tách nhánh.
Một thuộc tính không nhạy cảm với lúc khởi động được cung cấp qua cơ chế thuộc tính của framework kiểm thử có vòng đời khác. Đừng cho rằng mọi thuộc tính đến được VM đủ sớm chỉ vì System.getProperty() trả về chuỗi mong muốn trong lúc kiểm thử.
Đối với một bài kiểm thử định tuyến proxy tập trung, một client được cấu hình tường minh cũng có thể giảm sự phụ thuộc vào cấu hình máy tính để bàn. Java 11+ HttpClient có thể dùng HTTP ProxySelector cục bộ trong client cho mục đích đó. Hãy giữ lựa chọn đó hiển hiện trong ý định của bài kiểm thử: kiểm thử tuyến client và kiểm thử việc dò proxy của hệ điều hành là những kiểm tra khác nhau.