我的一个控制器动作(在Ajax请求中被调用的动作)正在将URL返回给客户端,以便它可以进行重定向。我正在使用,Url.RouteUrl(..)并且在我的单元测试期间由于Controller.Url未预先填写参数而导致失败。我尝试了很多操作,其中包括尝试存根UrlHelper(失败)的其他方法,并手动创建了UrlHelper具有RequestContext存根HttpContextBase(在RouteCollection.GetUrlWithApplicationPath通话中失败)的。我已经搜索过Google,但在该主题上几乎找不到任何内容。我在执行Url.RouteUrlController动作时是否正在做一些非常愚蠢的事情?有更容易的方法吗?更糟糕的是,我希望能够在单元测试中测试返回的URL-实际上,我只想知道它已重定向到正确的路由,但是由于我返回的是URL,而不是路由,我想控制要解析的URL(例如通过使用stubbed RouteCollection)-但我很乐意让我的测试通过。
3 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
通过@ 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);
- 3 回答
- 0 关注
- 700 浏览
添加回答
举报
0/150
提交
取消