我正在尝试编写一个通过但我的测试调用的方法调用另一个使用UrlHelper
该类生成 URL 的方法的单元测试。调用结果urlHelper.Action
不断返回null
。
我已经尝试模拟(使用 Moq)我认为该控制器需要能够使其正常工作的所有组件,但我仍然得到null
.
单元测试类
[TestFixtureSetUp]
public void Configure_Defaults()
{
var mockHttpContextBase = new Mock<HttpContextBase>();
var mockRequest = new Mock<HttpRequestBase>();
var mockControllerContext = new Mock<ControllerContext>();
var mockWebRoutingRequestContrext = new Mock<RequestContext>();
mockRequest
.Setup(request => request.Url)
.Returns(new Uri("http://dev.fleepos.local/Register"));
mockHttpContextBase
.Setup(httpContext => httpContext.Request)
.Returns(mockRequest.Object);
mockWebRoutingRequestContrext
.Setup(request => request.HttpContext)
.Returns(mockHttpContextBase.Object);
mockWebRoutingRequestContrext
.Setup(request => request.RouteData)
.Returns(new RouteData());
var urlHelper = new UrlHelper(mockWebRoutingRequestContrext.Object);
mockControllerContext
.Setup(controllerContext => controllerContext.HttpContext)
.Returns(mockHttpContextBase.Object);
_registerController = new RegisterController() {ControllerContext = mockControllerContext.Object, Url = urlHelper};
}
[Test]
public void Display_Validate_Account_Page_On_Successful_Registration()
{
//act
var result = (RedirectToRouteResult)_registerController.Register(_userRegisterationViewModel);
//assert
Assert.That(result.RouteValues["action"], Is.EqualTo("ValidateAccount"));
}
控制器动作调用的控制器方法
private string GenerateActionLink(string actionName, string token, string username)
{
string validationLink = null;
if (Request.Url != null)
{
var urlHelper = new UrlHelper(ControllerContext.RequestContext);
validationLink = urlHelper.Action(actionName, "Register",
new { Token = token, Username = username },
Request.Url.Scheme);
}
return validationLink;
}