2

试图遵循这个: http: //msdn.microsoft.com/en-us/library/21a15yht.aspx这个例子的问题是它混合了 Visual Studio 用户和命令行用户的指令,但我已经尽力了仅遵循 VS 说明。

所以我有: 在 Visual Studio 中创建了一个新的单元测试项目,名为Example.

我添加了一个名为的资源Greeting.en-US.resx并将一个字符串放入 called HelloString

编辑我现在添加了另一个名为Greeting.resxstring 的默认资源文件是“Hello (Default)”

在此处输入图像描述

我的单元测试:

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)>.

相同的代码在控制台应用程序中工作得很好。

4

1 回答 1

1

好吧,我认为这是因为您的单元测试工具影子复制了主程序集,但没有复制卫星程序集。为附属程序集启用卷影复制并重新运行单元测试。

为了确认我的猜测,检查 Assembly.GetExecutingAssembly().Location 对 .Codebase 的值。

于 2013-05-28T13:54:24.133 回答