Java 使用TestNG运行本地化测试

Java 使用TestNG运行本地化测试,java,testng,setlocale,Java,Testng,Setlocale,我被困在这里: 我的设想: 我正在用TestNG运行一个测试,在这里我调用了第三方库的一个函数。此库使用Locale.getDefault()初始化 为了独立于运行测试的机器获得相同的测试结果,我想设置一个特定的区域设置,然后重置它。 不幸的是,尽管我可以将区域设置设置为所需的值,但其他一些测试(不在同一测试类中)失败了。。。可能是由于格式问题(本地化) 我尝试在@BeforeMethod中设置区域设置,但遇到了相同的问题。。。 测试是异步运行的吗?在此测试中设置区域设置真的会影响其他测试吗?在

我被困在这里:

我的设想: 我正在用TestNG运行一个测试,在这里我调用了第三方库的一个函数。此库使用Locale.getDefault()初始化

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

我尝试在@BeforeMethod中设置区域设置,但遇到了相同的问题。。。
测试是异步运行的吗?在此测试中设置区域设置真的会影响其他测试吗?

在JVM运行时更改区域设置是一个棘手的过程,整个应用程序都需要为此做好准备。来自

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


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

在JVM运行时更改区域设置是一个棘手的过程,整个应用程序都需要为此做好准备。来自

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


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

好的,我发现了问题:

语言环境最初是为格式设置的。因此,通过在
@BeforeClass
中运行所有内容,我的测试工作正常,但在使用
Locale.setDefault(Locale)“重置”所有内容之后是我之前保存的(但以错误的方式),我正在设置所有类别,而不仅仅是设置使其他测试失败的格式。正确答案是:

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);
}

好的,我发现了问题:

语言环境最初是为格式设置的。因此,通过在
@BeforeClass
中运行所有内容,我的测试工作正常,但在使用
Locale.setDefault(Locale)“重置”所有内容之后是我之前保存的(但以错误的方式),我正在设置所有类别,而不仅仅是设置使其他测试失败的格式。正确答案是:

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);
}

您的
teardown
方法仍然设置常规方法,这是故意的吗?是的,我正在设置我先前在init()中保存的方法:
locale=locale.getDefault(locale.Category.FORMAT)
您的
teardown
方法仍然设置常规方法,这是故意的吗?是的,我正在设置我先前在init()中保存的方法:
locale=locale.getDefault(locale.Category.FORMAT)