2010-04-21 10 views
5

Garip bir problemle karşılaştım. Ünite testimde yerel dizeleri kontrol etmek istiyorum. Ancak, işe yaramış gibi görünmüyor. Örneğin, iki kaynak oluşturdum: Çince için İngilizce ve Resource1.zh-CN.resx için Resource1.resx. Birim test projesi sadece (varsayılan?) İngilizce kaynak dizgisini alabilir. MSTest projesi yerelleştirilmiş dizeyi alamıyor mu?

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

başka düzenli bir proje oluşturdu lokalize dizeleri çalıştığından emin olmak için (bir MSTest projesi anlamına gelir): Bu kullanıyorum kodudur. Yani, düzenli bir projede çalışıyor, ancak bir MSTest projesinde değil.

Ben birim testinin geçerli bir kültür olarak 'zh-CN' yapmak için aşağıdaki kodu koymak bile yardım etmedi

:

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

Herkes gördü benzer sorunlar? Herhangi bir geçici çözüm var mı?

cevap

10

Yerelleştirme DLL'sinin sınama klasöründe olduğundan emin olmak için DeploymentItem kullanmanız gerekmiyor mu?

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

Oh, Great. Bu tedavi! Bir milyona teşekkür ederim! Bu ilginç olsa da ... resources.dll zaten proje sınama dizinine kopyalanmıştır. Bu özniteliği eklemek dosyayı yeniden kopyalamaz (zaman damgasından). Ancak, bu özellik olmadan, işe yaramıyor. – miliu

+0

hahah mstest lol delilik başka bir tebeşir –

+0

Güzel yakalamak. Bunu test yöntemlerimin üst kısmına "DeploymentItem" ile aklımda tutarak dosya kopyalama işlemini kontrol etmeyi seviyorum: "Assert.IsTrue (File.Exists (@" nl \ Project.resources.dll ")," Dosya bulunamadı ") – tomfanning