ResourceManager.GetString在单元测试中失败

本文关键字:失败 单元测试 GetString ResourceManager | 更新日期: 2023-09-27 18:05:26

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

  • MyResources.resx
  • MyResources.en.resx

在程序集中,我添加了一个处理程序类,其中包含reshandler类中的getstring包装器:

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

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

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

如果我从console-app调用这段代码,一切正常:

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

这段代码将英文版本写入控制台。但是,如果我从单元测试方法中调用完全相同的代码,MyResources的内容。将出现Resx。怎么了?单元测试是否由于某些原因而无法做到这一点?

ResourceManager.GetString在单元测试中失败

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