【问题标题】:MSTest project can't get localized string?MSTest 项目无法获取本地化字符串?
【发布时间】:2013-03-06 17:21:24
【问题描述】:

我遇到了一个奇怪的问题。在我的单元测试中,我想检查本地化的字符串。但是,我似乎无法让它工作。例如,我创建了两个资源:Resource1.resx 用于英文,Resource1.zh-CN.resx 用于中文。单元测试项目只能获取(默认?)英文资源字符串。这是我正在使用的代码:

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

有人遇到过类似的问题吗?有什么解决办法吗?

【问题讨论】:

    标签: string localization project mstest resources


    【解决方案1】:

    您不需要使用DeploymentItem 来确保本地化DLL 在测试文件夹中吗?

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

    【讨论】:

    • 哦,太好了。这就是解药!谢谢你一百万!有趣的是……resources.dll 已经分别复制到测试项目的目录中。添加此属性不会重新复制文件(从时间戳)。但是,没有这个属性,它就不起作用。
    • 不错的收获。我喜欢用[DeploymentItem]把它放在我的测试方法的顶部,以检查我的文件复制:Assert.IsTrue(File.Exists(@"nl\Project.resources.dll"), "File not found");
    • 它对我有用,但我不得不写:[DeploymentItem(@"fr\Proj.resources.dll", "fr-CA")]
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多