19

maven-surefire-plugin と、Maven がフォークされたテストを実行するデフォルトのロケールを読み込んだため、設定したロケールが失われる可能性があります。

フォーク モードで Maven でテストを実行し、ロケールを保持する方法はありますか?

- 編集 -

したがって、少し明確にするために、次を使用してシステムプロパティで言語と地域を設定することは完全に可能です。

<systemPropertyVariables>
  <user.language>en</user.language>
  <user.region>GB</user.region>
</systemPropertyVariables>

そして、それらは実際に実行中のプロセスに渡されます。ただし、これはそれに応じてロケールを設定しません。ロケールはシ​​ステム デフォルトのままです。

4

4 に答える 4

2

これをテストする方法はありませんが、試してみてください。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <project>
            <properties>
                <user.language>en</user.language>
                <user.region>GB</user.region>
            </properties>
        </project>
        <includes>
            <include>**/*Test.java</include>
        </includes>
        <forkMode>pertest</forkMode>
    </configuration>
</plugin>

編集:OKこれを試してください:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <systemPropertyVariables>
            <user.language>en</user.language>
            <user.region>GB</user.region>
        </systemPropertyVariables>
        <includes>
            <include>**/*Test.java</include>
        </includes>
        <forkMode>pertest</forkMode>
    </configuration>
</plugin>
于 2012-01-23T16:45:03.417 に答える
2

アプリケーションのデフォルトのロケールは、3 つの方法で決定されます。 まず、デフォルトを明示的に変更していない限り、getDefault() メソッドは、Java 仮想マシン (JVM) が最初にロードされたときに最初に決定されたロケールを返します。つまり、JVM はホスト環境からデフォルトのロケールを決定します。ホスト環境のロケールは、ホスト オペレーティング システムと、そのシステムで確立されたユーザー設定によって決まります。

次に、一部の Java ランタイム実装では、アプリケーション ユーザーは、user.language、user.country、および user.variant システム プロパティを設定して、コマンド ラインでこの情報を提供することにより、ホストのデフォルト ロケールをオーバーライドできます。【ソース

あなたは前編の犠牲者だと思うので、二編にチャンスはありません。

代わりに、単体テスト (またはその基本クラス) で、同じテキストで後述するように、プログラムで既定のロケールを設定することができます。

第 3 に、アプリケーションはsetDefault(Locale aLocale) メソッドを呼び出すことができます。このsetDefault(Locale aLocale)メソッドを使用すると、アプリケーションでシステム全体のリソースを設定できます。このメソッドで既定のロケールを設定した後、以降の の呼び出しでLocale.getDefault()は、新しく設定されたロケールが返されます。

static{
        Locale.setDefault(Locale.UK);
}
于 2012-01-25T16:00:35.270 に答える