简单的ResourceManager示例在单元测试中不起作用

时间:2013-05-28 12:41:56

标签: c# globalization vs-unit-testing-framework

试图遵循这个:http://msdn.microsoft.com/en-us/library/21a15yht.aspx示例的问题在于它是视觉工作室用户和命令行用户的混合指令,但我已尽力遵循VS指令。

所以我有:在视觉工作室中创建了一个名为Example的新单元测试项目。

我添加了一个名为Greeting.en-US.resx的资源,并在名为HelloString的字符串中添加了一个字符串。

编辑我现在添加了另一个名为Greeting.resx的默认资源文件字符串为“Hello(默认)”

enter image description here

我的单元测试:

using System.Globalization;
using System.Resources;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Example
{
    [TestClass]
    public class GreetingTests
    {
        [TestMethod]
        public void Hello()
        {
            var newCulture = new CultureInfo("en-US");
            Thread.CurrentThread.CurrentCulture = newCulture;
            Thread.CurrentThread.CurrentUICulture = newCulture;

            var rm = new ResourceManager("Example.Greeting",
                                         typeof (GreetingTests).Assembly);
            Assert.AreEqual("Hello (US)", rm.GetString("HelloString"));
        }
    }
}

现在它只加载默认的

Assert.AreEqual failed. Expected:<Hello (US)>. Actual:<Hello (Default)>.

相同的代码在Console App中工作正常。

1 个答案:

答案 0 :(得分:1)

嗯,我认为这是因为您的单元测试工具阴影复制主程序集但不复制卫星。 Enable shadow copying for satellite assembly并重新运行单元测试。

确认我对Assembly.GetExecutingAssembly()的猜测值。针对.Codebase的位置。