vendredi 2 septembre 2016

UrlHelper mock is not working

I am trying to write get write a unit test that passes but the method my test calls, calls another method which generates a URL using the URL helper class. The result of calling urlHelper.Action keeps returning null.

I have tried mocking (using Moq) all the components i assume this controller will need to be able to get this working, but I am still getting null.

Unit Test Class

[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://ift.tt/2ca8EZr"));

        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"));
    }

Controller method called by controller action

          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;
    }

Aucun commentaire:

Enregistrer un commentaire