2013-05-28 58 views
2

试图遵循这一点:http://msdn.microsoft.com/en-us/library/21a15yht.aspx该示例的问题在于它是visual studio用户和命令行用户的指令混合,但我尽我所能只遵循VS指令。简单的ResourceManager示例不能在单元测试中工作

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

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

编辑我现在已经添加了名为Greeting.resx串另一个默认的资源文件是 “你好(默认)”

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

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

+0

您的资源文件名是Greetings(复数),但您以单数形式请求资源 - 问候语。虽然我很惊讶你的代码在控制台中工作。可能是你在这个问题上犯了一个错字? – vlad2135

+0

@ vlad2135是的错字,谢谢。 – weston

回答

1

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

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

+0

啊,我没有发现有影子组件正在创建。 – weston

+0

如果我的答案解决了您的问题,请接受答案。 – vlad2135