Java စမ်းသပ်မှုများက java.net.useSystemProxies ကို အဘယ်ကြောင့် လွတ်သွားသနည်း
စတင်မှုအပေါ် ထိခိုက်လွယ်သော Java ပရောက်စီ ရှာဖွေတွေ့ရှိမှု ရွေးချယ်စရာများကို စမ်းသပ်မှုများ လုပ်ဆောင်နေသော JVM ထံ ပေးပို့ပါ၊ application သို့မဟုတ် build launcher ထံသာ မဟုတ်ဘဲ။
သင့် application သည် system proxy ကို ရှာတွေ့သော်လည်း JUnit စမ်းသပ်မှုက မရှာတွေ့ပါ။ ရှာဖွေမှု ကုဒ်ကို မပြောင်းမီ မည်သည့် JVM က process တစ်ခုစီကို လုပ်ဆောင်သည်နှင့် မည်သည့် argument များ ရရှိသည်ကို ဖော်ထုတ်ပါ။
JDK သည် java.net.useSystemProxies ကို စတင်ချိန်တွင် တစ်ကြိမ်သာ စစ်ဆေးသော property အဖြစ် မှတ်တမ်းတင်ထားသည်။ ၎င်းကို စမ်းသပ်မှု method အတွင်း သတ်မှတ်ခြင်းသည် ထို စတင်မှု ဆုံးဖြတ်ချက်ကို ပြောင်းရန် အလွန်နောက်ကျနိုင်သည်။
IDE application launcher၊ IDE စမ်းသပ်မှု runner၊ Maven ကိုယ်တိုင် နှင့် fork လုပ်ထားသော Surefire စမ်းသပ်မှု process တို့သည် မတူညီသော VM argument များ ရှိနိုင်သည်။ launcher တစ်ခုရှိ proxy သတ်မှတ်ချက်သည် အခြား launcher တစ်ခုက ၎င်းကို လွှဲပြောင်းပေးခဲ့သည်ဟု သက်သေမဟုတ်ပါ။
fork လုပ်ထားသော process ၏ ဖွဲ့စည်းမှုကို စစ်ဆေးပါ
Surefire ၏ argLine သည် fork လုပ်ထားသော လုပ်ဆောင်မှုများအတွက် command-line JVM ရွေးချယ်စရာများကို ပေးသည်။ စမ်းသပ်မှုများသည် ထိုသို့သော fork တွင် လုပ်ဆောင်သောအခါ စတင်မှု ရွေးချယ်စရာသည် ထိုနေရာတွင် ရှိနိုင်သည်:
<argLine>-Djava.net.useSystemProxies=true</argLine>ရွေးချယ်စရာကို ပရောဂျက်၏ လက်ရှိ ဖွဲ့စည်းမှုထဲ ပေါင်းစည်းပါ။ လက်ရှိ argLine ကို အစားထိုးခြင်းသည် coverage agent များ သို့မဟုတ် အခြား လိုအပ်သော JVM သတ်မှတ်ချက်များကို လွှင့်ပစ်နိုင်သည်။ build သည် fork မသုံးပါက အစားထိုးအနေဖြင့် စမ်းသပ်မှုများကို အမှန်တကယ် host လုပ်သော JVM ကို စစ်ဆေးပါ; argLine သည် fork လုပ်ထားသော လုပ်ဆောင်မှုများအတွက်သာ ထိရောက်သည်ဟု မှတ်တမ်းတင်ထားသည်။
စမ်းသပ်မှု framework ၏ property ယန္တရားမှတစ်ဆင့် ပေးသော စတင်မှုအပေါ် မထိခိုက်လွယ်သော property သည် မတူညီသော ဘဝစက်ဝန်း ရှိသည်။ စမ်းသပ်မှုအတွင်း System.getProperty() လိုချင်သော string ကို ပြန်ပေးသောကြောင့်သာ property တိုင်း VM ထံ အလုံအလောက် စောစီးစွာ ရောက်သည်ဟု မယူဆပါနှင့်။
အာရုံစိုက်ထားသော proxy လမ်းကြောင်း စမ်းသပ်မှုအတွက် ရှင်းလင်းစွာ ဖွဲ့စည်းထားသော client သည် desktop ဖွဲ့စည်းမှုအပေါ် မှီခိုမှုကို လျှော့ချနိုင်သည်။ Java 11+ HttpClient သည် ထိုရည်ရွယ်ချက်အတွက် client အတွင်း HTTP ProxySelector ကို အသုံးပြုနိုင်သည်။ ထို ရွေးချယ်မှုကို စမ်းသပ်မှု၏ ရည်ရွယ်ချက်တွင် မြင်သာအောင် ထားပါ: client လမ်းကြောင်းကို စမ်းသပ်ခြင်းနှင့် operating system ၏ proxy ရှာဖွေမှုကို စမ်းသပ်ခြင်းသည် မတူညီသော စစ်ဆေးမှုများ ဖြစ်သည်။