ResourceManager.GetString在单元测试中失败

时间:2011-08-14 11:46:35

标签: c# unit-testing resources

我用两个resx创建了一个MyResources程序集:

  • MyResources.resx
  • MyResources.en.resx

在程序集内部,我在ResHandler类中添加了一个包含GetString-wrapper的处理程序类:

    public string GetResString(string key)
    {            
        return _manager.GetString(key, _culture);
    }

_culture只是一个可以从外面设置的属性:

    public void ChangeCulture(CultureInfo newCulture)
    {            
        _culture = newCulture;
    }

如果我从一个说控制台应用程序调用此代码,一切正常:

    var res = ResHandler.GetInstance(Guid.NewGuid().ToString());
    //change the culture to "en"
    res.ChangeCulture(new CultureInfo("en"));
    Console.WriteLine(res.GetResString("TXT_0001"));

此代码将英文版本写入控制台。但是,如果我从unit-test-method调用完全相同的代码,则会出现MyResources.resx的内容。这里有什么不对?由于某些原因,单元测试无法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

请注意,附属程序集存储在包含EXE的目录的子目录中。像英语中的“en-US”或“en”。问题是,您的测试是在不同的EXE,mstest.exe而不是您的app.exe下运行的。因此,它将找不到卫星组件。我认为你可以通过在测试设置中使用部署来解决这个问题,但不确定。