2010-04-21 9 views
5

J'ai rencontré un problème étrange. Dans mon test unitaire, je veux vérifier les chaînes localisées. Cependant, je n'arrive pas à le faire fonctionner. Par exemple, j'ai créé deux ressources: Resource1.resx pour l'anglais et Resource1.zh-CN.resx pour le chinois. Le projet de test unitaire peut uniquement obtenir la chaîne de ressource anglaise (par défaut?). Voici le code que je utilise:Le projet MSTest ne peut pas obtenir de chaîne localisée?

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

J'ai créé un autre projet régulier (ne signifie pas un projet MSTest) pour vous assurer que les chaînes localisées fonctionnent. Donc, cela fonctionne dans un projet régulier, mais pas dans un projet MSTest.

Il n'a pas aidé, même si je mets le code suivant pour faire « zh-CN » comme la culture actuelle du test unitaire:

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

Tout le monde a vu des problèmes similaires? Y a-t-il une solution de contournement?

Répondre

10

Vous n'avez pas besoin d'utiliser DeploymentItem pour vous assurer que la DLL de localisation se trouve dans le dossier de test?

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

Oh, très bien. C'est le remède! Merci un million! C'est intéressant quand même ... le fichier resources.dll a déjà été copié pour tester le répertoire du projet. L'ajout de cet attribut ne recopie pas le fichier (à partir de l'horodatage). Cependant, sans cet attribut, cela ne fonctionne pas. – miliu

+0

hahah craie un autre à la folie de mstest lol –

+0

Belle prise. J'aime mettre cela en haut de mes méthodes de test avec '[DeploymentItem]' pour vérifier ma copie de fichier: 'Assert.IsTrue (File.Exists (@" nl \ Project.resources.dll ")," Fichier non trouvé ");' – tomfanning