asp.net-mvc - ASP.NET MVC : Unit testing controllers that use UrlHelper

标签 asp.net-mvc unit-testing urlhelper

我的 Controller 操作之一(在 Ajax 请求中调用的操作)正在向客户端返回一个 URL,以便它可以执行重定向。我正在使用 Url.RouteUrl(..) ,在单元测试期间,由于 Controller.Url 参数未预先填充,因此失败。

我尝试了很多方法,其中包括尝试 stub UrlHelper(失败了),手动创建一个带有RequestContextUrlHelper有一个已 stub 的 HttpContextBase(在 RouteCollection.GetUrlWithApplicationPath 调用上失败)。

我在谷歌上搜索过,但几乎没有找到任何关于这个主题的信息。我是否在 Controller 操作中使用 Url.RouteUrl 做了一些极其愚蠢的事情?有没有更简单的方法?

更糟糕的是,我希望能够在单元测试中测试返回的 URL - 事实上我只想知道它重定向到正确的路由,但因为我返回了一个 URL我想控制已解析的 URL,而不是路由(例如,通过使用 stub 的 RouteCollection) - 但我很高兴让我的测试一开始就通过。

最佳答案

这是我针对类似情况的测试之一(xUnit + Moq)(在 Controller 中使用 Url.RouteUrl)

var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);

var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.SetupGet(x => x.ApplicationPath).Returns("/");
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/a", UriKind.Absolute));
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());

var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.Setup(x => x.ApplyAppPathModifier("/post1")).Returns("http://localhost/post1");

var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
context.SetupGet(x => x.Response).Returns(response.Object);

var controller = new LinkbackController(dbF.Object);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);

关于asp.net-mvc - ASP.NET MVC : Unit testing controllers that use UrlHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674458/

相关文章:

java - 在单元测试期间回滚自动生成的表值

unit-testing - 单元测试 EJB 3.1

javascript - 将 ASP.NET MVC 应用程序部署到多个虚拟目录(URL 引用和 JS 文件问题)

c# - ASP.NET Core UrlHelper 及其工作原理

c# - MVC LINQ - 在相关表中使用 Contains 搜索/查询文本

c# - 获取 DropDownList 的选定值。 ASP.NET MVC

c# - 自动完成:用 json 数据显示结果

javascript - Jasmine 2 Spec 没有期待

c# - 如何将 slug 添加到 asp.net 核心网站中的所有链接生成?

c# - 在发布到 MVC Controller 时使用 DataAnnotations 排除特定字符串