Pourquoi est-ce que mon asp.net mvc contrôleur appelle pas ça de la classe de base de la méthode Initialize pendant les tests unitaires?

Je tente de l'unité de test de mon contrôleurs, et je suis en utilisant la valeur par défaut MVC 3 AccountController des tests unitaires. Jusqu'à présent j'ai mon contrôleur, qui ressemble à:

public partial class HomeController : MyBaseController
{
    public HomeController(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; }

    public virtual ActionResult Index()
    {

        return View();
    }

    public virtual ActionResult About()
    {
        return View();
    }
}

MyBaseController a le code suivant:

public class MyBaseController : Controller
{
    public MyJobLeadsBaseController()
    {
        CurrentUserId = 0;
    }

    protected override void Initialize(RequestContext requestContext)
    {
        if (MembershipService == null) { MembershipService = new AccountMembershipService(); }
        base.Initialize(requestContext);

        //If the user is logged in, retrieve their login id
        var user = MembershipService.GetUser();
        if (user != null)
            CurrentUserId = (int)user.ProviderUserKey;
    }

    public int CurrentUserId { get; set; }
    public IMembershipService MembershipService { get; set; }

    protected IUnitOfWork _unitOfWork;
}

Tout fonctionne correctement quand je lance le site réel, et les points d'arrêt de montrer que la Initialize() est correctement déclenché. Cependant, la suite du test de l'unité n'est jamais à l' Initialize(RequestContext) méthode:

    [TestMethod]
    public void Index_Shows_When_Not_Logged_In()
    {
        //Setup
        HomeController controller = new HomeController(_unitOfWork);
        controller.MembershipService = new MockMembershipService(null);
        SetupController(controller);

        //Act
        ActionResult result = controller.Index();

        //Verify
        Assert.IsNotNull(result, "Index returned a null action result");
        Assert.IsInstanceOfType(result, typeof(ViewResult), "Index did not return a view result");
    }

    protected static void SetupController(Controller controller)
    {
        RequestContext requestContext = new RequestContext(new MockHttpContext(), new RouteData());
        controller.Url = new UrlHelper(requestContext);

        controller.ControllerContext = new ControllerContext
        {
            Controller = controller,
            RequestContext = requestContext
        };
    }

De débogage à travers ce test montre qu'à aucun moment le substituée MyBaseController.Initialize() appelée à tous. Cela provoque des problèmes d'où mon CurrentUserId propriété n'est pas définie dans les tests unitaires, mais est mis sur le système live.

Quoi d'autre dois-je faire pour déclencher la Initialize() d'être appelé?

OriginalL'auteur KallDrexx | 2011-03-31