[英]Running a localized Test with TestNG
我被困在這里:
我的場景:我正在使用 TestNG 進行測試,其中我調用了第 3 方庫的 function。 該庫使用 Locale.getDefault() 進行初始化。
為了獨立於運行測試的機器獲得相同的測試結果,我想設置一個特定的區域設置並在之后重置它。 不幸的是,似乎雖然我可以將語言環境設置為我想要的值,但其他一些測試(不在同一個 testClass 中)失敗了......可能是由於格式問題(本地化)。
private Locale locale;
@BeforeClass
public void init() {
locale = Locale.getDefault();
Locale.setDefault(Locale.US);
}
@AfterClass
public void teardown() {
Locale.setDefault(locale);
}
@Test(dataProvider = "someDataProvider")
public void testThisWithUSLocale(String element) throws Exception {
String resultToTest = myClass.createSomething(element);
Assert.assertFalse(resultToTest.isEmpty());
}
我嘗試在 @BeforeMethod 中設置語言環境,但遇到了同樣的問題……測試是否異步運行? 在這個測試中設置語言環境真的會影響其他測試嗎?
在 JVM 運行時更改語言環境是一個棘手的過程,整個應用程序都需要為此做好准備。 來自setDefault
的 javadocs
由於更改默認區域設置可能會影響許多不同的功能區域,因此僅當調用者准備重新初始化在同一 Java 虛擬機中運行的區域設置敏感代碼時,才應使用此方法。
您的測試設置看起來正確,但無論您的代碼(或第 3 方庫)做什么,都可能不支持更改語言環境。
好吧,我發現了問題:
語言環境最初是為 FORMAT 設置的。 因此,通過在@BeforeClass
中運行所有內容,我的測試工作正常,但是在使用Locale.setDefault(locale);
“重置”所有內容之后我之前保存的(但以錯誤的方式),我正在設置所有類別,而不僅僅是 FORMAT 使其他測試失敗。 正確的是:
private Locale locale;
@BeforeClass
public void init() {
locale = Locale.getDefault(Locale.Category.FORMAT);
Locale.setDefault(Locale.Category.FORMAT, Locale.US);
}
@AfterClass
public void teardown() {
Locale.setDefault(locale);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.