gpt4 book ai didi

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

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

我的 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/

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