首页 > 解决方案 > 如何模拟 IUrlHelper

问题描述

单元测试入门可能会令人沮丧,卡在每一个细节上。希望随着我获得更多经验,这种情况会有所改善。

现在,我如何模拟IUrlHelper单元测试?

我有这个简单的方法来获取 ASP.NET 中的绝对路径

public static string AbsolutePage(this IUrlHelper url, string pageName, string pageHandler = null, object routeValues = null)
{
    return url.Page(pageName, pageHandler, routeValues, url.ActionContext.HttpContext.Request.Scheme);
}

模拟方案很容易

return Mock.Of<IUrlHelper>(x =>
    x.ActionContext.HttpContext.Request.Scheme == "http");

但随后该方法调用了IUrlHelper. 现在我该怎么做?

我很想跳过像这样令人沮丧的小测试,但我认为在第一次学习时保持精力充沛很重要。

标签: c#.netasp.net-mvcunit-testingasp.net-core

解决方案


如果您仍想测试您的IUrlHelper,您可以使用此代码

var mocked = new Mock<IUrlHelper>();

mocked.Setup(x => x.Page(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>(), It.IsAny<string>()))
                    .Returns("whatever_string");

IUrlHelper helper = mocked.Object;

推荐阅读