ASP.NET MVC 2内でFakeTeasyを使用して、ユニットテストの目的でユーザーログインを偽造するにはどうすればよいですか

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

  •  30-09-2019
  •  | 
  •  

質問

私は学習とASP.NET MVC 2を使用し始めたばかりで、コードのユニットテストにより多くの関与を得ています。私の質問は、テスト内で資格情報を渡すことにより、ユーザーのログインをシミュレートする方法です。

私はMSPECを使用しており、テストを書き上げるためにHeadをFakeIteasyに巻き込もうとしています。これまでのところ、私は1つのテストを正しく書いたと思います(テスト条件に合格します)。

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

ここまでは順調ですね。ただし、認証されたユーザーがホームコントローラーにヒットしたときのシナリオをテストしたいと思います。認証されたユーザーをシミュレートする方法に固執しています。ヘルプやアドバイスは歓迎されます。

ティア、

デビッド

役に立ちましたか?

解決

Fakeiteasyの作成者であるPatrik Hagneと連絡を取った後、彼は次のことを思いつきました。

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

それはトリックをしました!パトリックに感謝します!

他のヒント

これがTouがアイデンティティを偽造する方法です:

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

今あなたが使用するとき HomeController.User プロパティそれは、提供された偽の校長を指します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top