2010-04-21 35 views
5

我遇到了一個奇怪的問題。在我的單元測試中,我想檢查本地化的字符串。但是,我似乎無法得到它的工作。例如,我創建了兩個資源:英文的Resource1.resx和中文的Resource1.zh-CN.resx。單元測試項目只能獲取(默認?)英文資源字符串。這是我使用的代碼:MSTest項目無法獲得本地化的字符串?

ResourceManager actual = new ResourceManager(typeof(LocaleTest.Properties.Resource1)); 
string name0 = actual.GetString("Name", new CultureInfo("en-US")); 
string name1 = actual.GetString("Name", new CultureInfo("zh-CN")); 

我創造了另一個常規項目(指不是MSTest的項目),以確保本地化的字符串工作。所以,它在一個常規項目中工作,但不在MSTest項目中。

即使我把下面的代碼,使「ZH-CN」作爲單元測試的當前區域性它並沒有幫助:

[TestInitialize()] 
public void MyTestInitialize() 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"); 
} 

有人見過類似的問題?有什麼解決方法嗎?

回答

10

您是否需要使用DeploymentItem來確保本地化DLL位於測試文件夾中?

[TestMethod()] 
[DeploymentItem(@"bin\Debug\fr\Proj.resources.dll", "fr-CA")] 
public void TestDialogLocalization(){ 
// blah 
} 
+0

哦,太好了。這是治癒!謝謝你! 雖然...有趣的是,resources.dll已經被分別複製到測試項目的目錄中。添加此屬性不會重新複製文件(來自時間戳)。但是,沒有這個屬性,它不起作用。 – miliu 2010-04-22 19:10:04

+0

哈哈粉筆另一個mstest大聲笑的瘋狂 – 2010-04-22 21:29:43

+0

很好的捕獲。我喜歡用'[DeploymentItem]'把我的測試方法的頂部放在我的文件複製檢查我的文件:Assert.IsTrue(File.Exists(@「nl \ Project.resources.dll」),「File not found 「);' – tomfanning 2012-11-06 18:03:57