为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET MVC:使用UrlHelper的单元测试控制器

ASP.NET MVC:使用UrlHelper的单元测试控制器

临摹微笑 2019-11-05 15:51:20
我的一个控制器动作(在Ajax请求中被调用的动作)正在将URL返回给客户端,以便它可以进行重定向。我正在使用,Url.RouteUrl(..)并且在我的单元测试期间由于Controller.Url未预先填写参数而导致失败。我尝试了很多操作,其中包括尝试存根UrlHelper(失败)的其他方法,并手动创建了UrlHelper具有RequestContext存根HttpContextBase(在RouteCollection.GetUrlWithApplicationPath通话中失败)的。我已经搜索过Google,但在该主题上几乎找不到任何内容。我在执行Url.RouteUrlController动作时是否正在做一些非常愚蠢的事情?有更容易的方法吗?更糟糕的是,我希望能够在单元测试中测试返回的URL-实际上,我只想知道它已重定向到正确的路由,但是由于我返回的是URL,而不是路由,我想控制要解析的URL(例如通过使用stubbed RouteCollection)-但我很乐意让我的测试通过。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

通过@ eu-ge-ne建立答案,这对我有很大帮助:


我有一个执行重定向的ActionResult以及一个带有FormCollection参数的UpdateModel调用。为了使UpdateModel()正常工作,我必须将其添加到模拟的HttpRequestBase中:


FormCollection collection = new FormCollection();

collection["KeyName"] = "KeyValue";


request.Setup(x => x.Form).Returns(collection);

request.Setup(x => x.QueryString).Returns(new NameValueCollection());

要测试重定向的URL是否正确,您可以执行以下操作:


RedirectResult result = controller.ActionName(modelToSubmit, collection) as RedirectResult;

Assert.AreEqual("/Expected/URL", result.Url);


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 659 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信