web-dev-qa-db-ja.com

C#テストプロジェクトのローカリゼーションカルチャーをen-USに強制するにはどうすればよいですか

VS2008のC#でテストプロジェクトのコンカレントローカリゼーションカルチャを指定する方法web.configで指定された非標準のカルチャを持つAsp .Net MVCアプリを構築していますが、そのプロジェクトの単体テストに同じカルチャを設定するにはどうすればよいですか?

34
mgamer

設定できます

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 

ユニットテストフレームワークで「テスト初期化子」としてマークされているメソッド内。

57
Tony Kh

XUnitを使用している場合、ここで定義されているように、UseCultureAttributeをプロジェクトに追加できます。

https://github.com/xunit/samples.xunit/blob/master/UseCulture/UseCultureAttribute.cs

それを使用するには:

[Fact]
[UseCulture("en-US")]
public void MyTest()
{
    // ...
}
9
Drew Noakes

すべてのCultureInfoTestInitializerに追加せずに、テストスイート全体にTestClassを指定する場合は、 AssemblyInitializeAttribute を使用できます。 =。

新しいTestClassを作成し、属性[TestClass]で装飾します。DefaultThreadCurrentCultureDefaultThreadCurrentUICultureを設定する静的メソッドを追加し、そのメソッドを[AssemblyInitialize]で装飾します。

[TestClass]
public static class InitializeCulture
{
    [AssemblyInitialize]
    public static void SetEnglishCultureOnAllUnitTest(TestContext context)
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
    }
}

このメソッドは、テストスイートの起動時にTestMethodが実行される前に1回実行されます。 (注:テストスイートでは、この属性で修飾されたメソッドが1つだけある場合があります。)

4
Jon Senchyna
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
3
Tausif Baber

NUnit 3の場合、属性[SetUICulture("en-us")]を使用できます。これにより、この単一のテストのカルチャーが強制されます。

3

あなたのケースで機能するweb.configのような設定はありません。

ここの他の回答で提案されているように、各スレッドに設定することもできます。

または、VS.NETで作成されたリソースを使用している場合、コード生成により、Resourceクラスに「Culture」という静的プロパティが作成されます。単体テストのSuiteスタートアップメソッドで設定できます。これは、実行するすべてのテストに適用されます。

0
Naraen