Unité de contrôleur de test à l'aide de MOQ . Comment se moquer de httpcontext

Je suis en train de tester mon Compte contrôleur en utilisant Moq voici ce que j'ai fait

Contrôleur

   private readonly IWebSecurity _webSecurity;
    public AccountController(IWebSecurity webSecurity)
    {
        this._webSecurity = webSecurity;
    }
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && _webSecurity.login(model))
        {
            return RedirectToLocal(returnUrl);
        }

        //If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
    private ActionResult RedirectToLocal(string returnUrl)
    {
        if (Url.IsLocalUrl(returnUrl))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }

IWebSecurity

public interface IWebSecurity
{
    bool login(LoginModel model);
}


public class WebSecurity : IWebSecurity
{
    public bool login(LoginModel model)
    {
        return WebMatrix.WebData.WebSecurity.Login(model.UserName, model.Password, model.RememberMe);
    }
}

MyTestClass

[AfterScenario]
    public void OnAfterScenario() {
        mockRepository.VerifyAll();
    }

    LoginModel loginModel;
    AccountController _controller;

    #region Initializing Mock Repository

    readonly Mock<IWebSecurity> mockRepository = new Mock<IWebSecurity>(MockBehavior.Loose);
    ViewResult viewResult;

    #endregion

    [Given]
    public void Given_Account_controller()
    {
        _controller = new AccountController(mockRepository.Object);
    }

    [When]
    public void When_login_is_called_with_LoginModel(Table table)
    {
         loginModel = new LoginModel
            {
                UserName = table.Rows[0][1],
                Password = table.Rows[1][1]
            };
         mockRepository.Setup(x => x.login(loginModel)).Returns(true);
         viewResult = (ViewResult)_controller.Login(loginModel, "/");
    }

    [Then]
    public void Then_it_should_validate_LoginModel()
    {
       Assert.IsTrue(_controller.ModelState.IsValid);
    }

    [Then]
    public void Then_it_should_return_default_view()
    {
        Assert.AreEqual(viewResult.ViewName, "Index");
    }

Mais mon test est un échec et sa présentation attente lorsque viennent à Url.IsLocal dans Redirect to Local méthode . donc, je pense que c'est ici devraient se moquer de mon httpcontextbase et httpcontextrequestbase .

Mais ne savent pas comment se moquent de ce .

Merci d'avance

OriginalL'auteur Ancient | 2013-06-17