VS2008のC#でテストプロジェクトのコンカレントローカリゼーションカルチャを指定する方法web.configで指定された非標準のカルチャを持つAsp .Net MVCアプリを構築していますが、そのプロジェクトの単体テストに同じカルチャを設定するにはどうすればよいですか?
設定できます
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
ユニットテストフレームワークで「テスト初期化子」としてマークされているメソッド内。
XUnitを使用している場合、ここで定義されているように、UseCultureAttribute
をプロジェクトに追加できます。
https://github.com/xunit/samples.xunit/blob/master/UseCulture/UseCultureAttribute.cs
それを使用するには:
[Fact]
[UseCulture("en-US")]
public void MyTest()
{
// ...
}
すべてのCultureInfo
のTestInitializer
に追加せずに、テストスイート全体にTestClass
を指定する場合は、 AssemblyInitializeAttribute を使用できます。 =。
新しいTestClass
を作成し、属性[TestClass]
で装飾します。DefaultThreadCurrentCulture
とDefaultThreadCurrentUICulture
を設定する静的メソッドを追加し、そのメソッドを[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つだけある場合があります。)
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
NUnit 3の場合、属性[SetUICulture("en-us")]
を使用できます。これにより、この単一のテストのカルチャーが強制されます。
あなたのケースで機能するweb.configのような設定はありません。
ここの他の回答で提案されているように、各スレッドに設定することもできます。
または、VS.NETで作成されたリソースを使用している場合、コード生成により、Resourceクラスに「Culture」という静的プロパティが作成されます。単体テストのSuiteスタートアップメソッドで設定できます。これは、実行するすべてのテストに適用されます。