簡體   English   中英

C# 如何強制本地化文化對美國進行測試項目

[英]C# How can I force Localization Culture to en-US for tests project

如何在 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而不必將其添加到每個TestClassTestInitializer中,則可以使用AssemblyInitializeAttribute

在測試類(用屬性[TestClass]修飾的類)中,添加設置DefaultThreadCurrentCultureDefaultThreadCurrentUICulture的靜態方法,然后用[AssemblyInitialize]修飾該方法。

當您的測試套件啟動時,此方法將在運行任何 TestMethods 之前運行一次。 (注意:您的測試套件中可能只有一個使用此屬性修飾的此類方法。)

這是一個使用專用測試類的示例,該類僅用於設置文化,但您可以將其放在任何測試類中:

[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");
    }
}

對於 nUnit 3,您可以使用屬性[SetUICulture("en-us")] 這將強制此單個測試的文化。

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

以下方法對我有用:

[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]
}

沒有類似於 web.config 中的設置適用於您的情況。

您可以嘗試按照此處其他答案的建議為每個線程設置它。

或者,如果您使用在 VS.NET 中創建的資源,代碼生成會在名為“Culture”的 Resource 類上創建一個靜態屬性。 您可以在單元測試的 Suite 啟動方法中進行設置。 這將適用於您運行的所有測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM