这是控制器的return语句:
var url = Url.Action("method", "controller", new { id = id }) + "#anchor-tag";
return new RedirectResult(url);
所以,在我的测试方法中,我需要分配Controller的(sut)UrlHelper,所以我没有得到空引用异常。我正在使用FakeItEasy来模拟HttpContext:
sut.Url = new UrlHelper(new RequestContext(A.Fake<HttpContextBase>(), new RouteData()), new RouteCollection());
这似乎工作正常,但是当我想证明控制器的action方法已经重定向到正确的方法和控制器时:
var redirectResult = sut.DoSomething(input);
当控制器操作返回RedirectToRouteResult时,我无法提取RouteValues。又名:
Assert.That(redirectResult.RouteValues["id"], Is.EqualTo(Id));
b / c RedirectResult不允许我访问这些变量。另外,如果我尝试施放它:
var redirectResult = (RedirectToRouteResult)sut.DoSomething(input);
我收到了投射错误。
我需要能够测试控制器是否重定向到适当的位置,但是我不能这样做b / c Url.Action(...)必须在内部与其他项目一起工作,例如RouteData,RouteCollection等。 ..
任何人都知道如何使用ControllerContext在我的测试中预先填充我需要的“路径”数据:
sut.ControllerContext = new ControllerContext(requestContext, sut);
为了让Url.Action在测试中将正确的值吐回给我?
谢谢! 麦克
答案 0 :(得分:2)
如果我理解你的问题,你想测试从返回的RedirectResult返回的网址。
您可以简单地执行以下操作:
var result =(RedirectResult)aec.Result;
然后result.Url.AbsoluteURI包含您可以解析的字符串值