如何在VS2008中的C#中为测试项目指定concrente Localization Culture?我正在构建具有web.config中指定的非标准文化的Asp .Net MVC应用程序,但是如何为该项目的单元测试设置相同的文化?
答案 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
,为其添加一个设置DefaultThreadCurrentCulture
和DefaultThreadCurrentUICulture
的静态方法,然后使用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启动方法中设置它。这将适用于您运行的所有测试。