首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TestNG运行本地化测试

使用TestNG运行本地化测试
EN

Stack Overflow用户
提问于 2020-08-12 22:02:58
回答 2查看 80关注 0票数 0

我被困在这里了:

我的场景:我正在用TestNG运行一个测试,其中我调用了第三方库的一个函数。这个库使用Locale.getDefault()进行初始化。

为了独立于运行测试的机器获得相同的测试结果,我想设置一个特定的语言环境,然后重置它。不幸的是,尽管我可以将语言环境设置为我想要的值,但其他一些测试(不在同一个testClass中)却失败了……可能是由于格式问题(本地化)。

代码语言:javascript
复制
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中设置区域设置,但遇到了同样的问题……测试是异步运行的吗?在此测试中设置区域设置真的会影响其他测试吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-12 22:28:08

在JVM运行时更改语言环境是一个棘手的过程,整个应用程序都需要为此做好准备。来自setDefault的javadocs

由于更改默认语言环境可能会影响许多不同的功能领域,因此只有当调用者准备重新初始化在同一个Java虚拟机中运行的语言环境敏感代码时,才应使用此方法。

您的测试设置看起来是正确的,但是无论您的代码(或第三方库)做什么,都可能不支持更改语言环境。

票数 1
EN

Stack Overflow用户

发布于 2020-08-13 19:24:12

好了,我找到问题了:

区域设置最初设置为格式。因此,通过在@BeforeClass中运行所有内容,我的测试运行得很好,但在用Locale.setDefault(locale);“重置”了我之前保存的所有内容(但以错误的方式)之后,我设置了所有类别,而不仅仅是格式导致其他测试失败。正确的答案是:

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63378221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档