C#如何强制本地化文化进入测试项目的en-US
如何在VS2008中为C#中的测试项目指定concrente Localization Culture? 我正在构建具有web.config中指定的非标准文化的Asp .Net MVC应用程序但是如何为该项目的unit testing设置相同的文化?
你可以设置
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
在unit testing框架中标记为“test initializer”的方法中。
如果您正在使用xUnit,则可以将UseCultureAttribute
添加到项目中,如下所示:
https://github.com/xunit/samples.xunit/blob/master/UseCulture/UseCultureAttribute.cs
要使用它:
[Fact] [UseCulture("en-US")] public void MyTest() { // ... }
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); System.Threading.Thread.CurrentThread.CurrentCulture = ci;
如果要为整个Test Suite指定CultureInfo
而不必将其添加到每个TestClass
的TestInitializer
中,则可以使用AssemblyInitializeAttribute 。
创建一个新的TestClass
,向其添加一个静态方法,设置DefaultThreadCurrentCulture
和DefaultThreadCurrentUICulture
,然后使用AssemblyInitialzeAttribute
修饰该方法。 在运行任何TestMethod之前,在测试套件启动时,此方法将运行一次。 (注意:在测试套件中,您可能只有一个这样的方法用这个属性修饰。)
没有类似于web.config中的设置,它将适用于您的情况。
你可以尝试为每个线程设置它,如其他答案所示。
或者,如果您使用在VS.NET中创建的资源,代码生成会在Resource类上创建一个名为“Culture”的静态属性。 您可以在unit testing的Suite启动方法中设置它。 这将适用于您运行的所有测试。