簡體   English   中英

使用 TestNG 運行本地化測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM