Comment puis-je simuler un journal utilisateur dans des fins de test à l'aide de l'unité au sein fakeiteasy asp.net mvc 2

StackOverflow https://stackoverflow.com/questions/4335624

  •  30-09-2019
  •  | 
  •  

Question

Je viens de commencer l'apprentissage et usingASP.NET MVC 2 et aussi s'impliquer davantage dans les tests unitaires mon code. Ma question est généralement comment simuler un journal d'utilisateur en passant dans les informations d'identification dans mon test.

J'utilise MSpec et essayer d'obtenir ma tête autour fakeiteasy afin d'écrire mon test. Jusqu'à présent, je crois que je l'ai écrit un essai correctement (Il passe la condition de test) quand un utilisateur non authentifié tente d'accéder à une page.

Subject( typeof( HomeController ) )]
public class context_for_a_home_controller_for_not_logged_user
{
    protected static HomeController HomeController;

    Establish context = () =>
    {
        // Create controller
        HomeController = new HomeController();

        HomeController.ControllerContext = A.Fake<ControllerContext>();
    };
}

[Subject(typeof(HomeController))]
public class when_the_home_page_is_requested : context_for_a_home_controller_for_not_logged_user
{
    static ActionResult result;

    Because of = () => 
        result = HomeController.Index();

    It should_return_the_log_in_page_if_user_not_logged_in = () =>
        { result.ShouldBeAView().And().ShouldUseDefaultView(); };
}

Jusqu'à présent, si bon. Cependant, je voudrais tester le scénario lorsqu'un utilisateur authentifié frappe le contrôleur de la maison. Je suis coincé dans la façon de simuler un utilisateur authentifié et toute aide ou des conseils serait la bienvenue.

TIA,

David

Était-ce utile?

La solution

Après avoir obtenu en contact avec Patrik Hagne, le créateur de FakeItEasy, il est venu avec ce qui suit:

 [Subject( typeof( HomeController ) )]
public class context_for_a_home_controller_for_logged_user
{
    protected static HomeController HomeController;

    Establish context = () =>
    {
        // Create controller
        HomeController = new HomeController();

        HomeController.ControllerContext = A.Fake<ControllerContext>();
        var fakePrincipal = A.Fake<IPrincipal>();
        var fakeIdentity = new GenericIdentity( "username" );
        A.CallTo( () => fakePrincipal.Identity ).Returns( fakeIdentity );
        A.CallTo( () => HomeController.ControllerContext.HttpContext.User ).Returns( fakePrincipal );
    };
}

qui a fait l'affaire! Merci Patrik!

Autres conseils

Voici comment pourrait fausse l'Tou identité:

Subject( typeof( HomeController ) )]
public class context_for_a_home_controller_for_a_logged_user
{
    protected static HomeController HomeController;

    Establish context = () =>
    {
        // Create controller
        HomeController = new HomeController();

        var fakeControllerContext = A.Fake<ControllerContext>();
        var fakeHttpContext = A.Fake<HttpContextBase>();
        var fakePrincipal = A.Fake<IPrincipal>();
        var fakeIdentity = new GenericIdentity("someusername");

        HomeController.ControllerContext = fakeControllerContext;
        A.CallTo(() => fakeControllerContext.HttpContext).Returns(fakeHttpContext);
        A.CallTo(() => fakeHttpContext.User).Returns(fakePrincipal);        
        A.CallTo(() => fakePrincipal.Identity).Returns(fakeIdentity);
    };
}

Maintenant, lorsque vous utilisez la propriété de HomeController.User il pointera vers le principal faux qui a été fourni.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top