gpt4 book ai didi

.net - 你如何起订一个生活在 App_GlobalResource 中的 .resx?

转载 作者:行者123 更新时间:2023-12-04 04:12:41 25 4
gpt4 key购买 nike

我正在为 MVC3 Web 项目中的 Controller 编写单元测试,但是当我的测试尝试访问这样的资源时会抛出异常:

return Index(Resources.Strings.MyStringResource);

资源是 .resx文件标题为 Strings .

我正在使用 MoqHttpContextBase 实现单元测试的库功能,所以我想知道如何使用 Moq 库来访问 App_GlobalResource。

任何帮助或指示将不胜感激!

最佳答案

你不能,至少不能直接。从资源 (.resx) 文件生成的强类型类公开静态方法,而不是实例方法。

因此,它们不能实现接口(interface)方法,也不是虚拟的; Moq要求至少满足其中一个条件才能创建模拟。

为了解决这个问题,您将创建一个抽象,就像其他任何东西一样:

public interface IResources
{
string MyStringResource { get; }
}

您可以将它的实现传递(或注入(inject))到您的 Controller 中,然后将其传递给您的 Index方法。该实现可能如下所示:
public class ResourcesWrapper : IResources
{
public string MyStringResource
{
get
{
return Resources.Strings.MyStringResource;
}
}
}

然后,在测试时,您可以使用 Moq 创建 IResources 的模拟。接口(interface),并将其传递给您的 Controller ,如下所示:
// Create the mock.
var mock = new Mock<IResources>();

// Setup the property.
mock.SetupProperty(m => m.MyStringResource, "My Mocked Value");

// Pass the object somewhere for use.
Assert.AreEqual(mock.Object.MyStringResource, "My Mocked Value");

关于.net - 你如何起订一个生活在 App_GlobalResource 中的 .resx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com