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

我的一个控制器动作(在Ajax请求中被调用的动作)正在将URL返回给客户端,以便它可以进行重定向。我正在使用,Url.RouteUrl(..)并且在我的单元测试期间由于Controller.Url未预先填写参数而导致失败。

我尝试了很多操作,其中包括尝试存根UrlHelper(失败)的其他方法,并手动创建了UrlHelper具有RequestContext存根HttpContextBase(在RouteCollection.GetUrlWithApplicationPath通话中失败)的。

我已经搜索过Google,但在该主题上几乎找不到任何内容。我在执行Url.RouteUrlController动作时是否正在做一些非常愚蠢的事情?有更容易的方法吗?

更糟糕的是,我希望能够在单元测试中测试返回的URL-实际上,我只想知道它已重定向到正确的路由,但是由于我返回的是URL,而不是路由,我想控制要解析的URL(例如通过使用stubbed RouteCollection)-但我很乐意让我的测试通过。


临摹微笑
浏览 712回答 3
3回答

料青山看我应如是

通过@ 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);
打开App,查看更多内容
随时随地看视频慕课网APP