C#如何强制本地化文化进入测试项目的en-US

时间:2011-02-15 08:14:14

标签: c# unit-testing localization locale

如何在VS2008中的C#中为测试项目指定concrente Localization Culture?我正在构建具有web.config中指定的非标准文化的Asp .Net MVC应用程序,但是如何为该项目的单元测试设置相同的文化?

7 个答案:

答案 0 :(得分:54)

您可以设置

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

在单元测试框架中标记为“test initializer”的方法中。

答案 1 :(得分:7)

如果您正在使用xUnit,则可以将UseCultureAttribute添加到项目中,如下所示:

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

使用它:

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

答案 2 :(得分:3)

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;

答案 3 :(得分:2)

如果您要为整个Test Suite指定CultureInfo而无需在每个TestInitializer的{​​{1}}中添加TestClass,则可以使用AssemblyInitializeAttribute。< / p>

创建一个新的TestClass,为其添加一个设置DefaultThreadCurrentCultureDefaultThreadCurrentUICulture的静态方法,然后使用AssemblyInitialzeAttribute修饰该方法。在运行任何TestMethod之前,当您的测试套件启动时,此方法将运行一次。 (注意:在测试套件中,您可能只有一个这样的方法用此属性修饰。)

答案 4 :(得分:1)

对于nUnit 3,您可以使用属性[SetUICulture("en-us")]。 这将强制进行此单一测试。

答案 5 :(得分:1)

以下方法对我有用:

[TestClass]
public class MyTestClass
{ 
   [TestInitialize]
   public void InitializeTestClass()
   {
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
   }

   .......... [other unit tests]
}

答案 6 :(得分:0)

没有类似于web.config中的设置,它将适用于您的情况。

您可以尝试按照其他答案的建议为每个帖子设置它。

或者,如果您使用在VS.NET中创建的资源,代码生成会在Resource类上创建一个名为“Culture”的静态属性。您可以在单元测试的Suite启动方法中设置它。这将适用于您运行的所有测试。