如何模拟IUrlHelper

时间:2019-03-25 14:15:53

标签: c# .net asp.net-mvc unit-testing asp.net-core

开始进行单元测试可能会令人沮丧,陷入每个细节。希望随着我获得更多经验而有所改善。

现在,如何模拟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上调用Page方法。我现在该怎么办?

我很想跳过像这样的小型挫折测试,但是我认为在初次学习时保持精力旺盛很重要。

1 个答案:

答案 0 :(得分:-1)

如果您仍然想测试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;