7

テストで現在ログインしているユーザーを必要とするコードを単体テストしようとしています。.Net 2.0 メンバーシップ プロバイダーを使用して、プログラムでこのテストのユーザーとしてログインするにはどうすればよいですか?

4

4 に答える 4

2

Thread.CurrentPrincipal の設定とリセットを処理する使い捨てクラスを作成するのが最も便利であることがわかりました。

    public class TemporaryPrincipal : IDisposable {
        private readonly IPrincipal _cache;

        public TemporaryPrincipal(IPrincipal tempPrincipal) {
            _cache = Thread.CurrentPrincipal;
            Thread.CurrentPrincipal = tempPrincipal;
        }

        public void Dispose() {
            Thread.CurrentPrincipal = _cache;
        }
    }

テスト メソッドでは、次のような using ステートメントで呼び出しをラップするだけです。

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) {
    ClassUnderTest.MethodUnderTest();
}
于 2008-10-30T16:18:09.787 に答える
1

あなたのコードは実際に ASP.NET 経由でログインしているユーザーを必要としますか?それとも CurrentPrincipal だけが必要ですか? プログラムでサイトにログインする必要はないと思います。GenericPrincipalを作成し、必要なプロパティを設定して、Thread.CurrentPrincipal やモック化された HttpContext などにアタッチできます。あなたのコードが実際に RolePrincipal などを必要とする場合は、ASP.NET メンバーシップとの結合が少なくなるようにコードを変更します。

于 2008-10-28T19:19:52.963 に答える
0

メンバーシップ プロバイダーを使用すると、Membership.ValidateUser を使用してユーザーを検証できます。その後、FormsAuthentication.SetAuthCookie を使用して認証 Cookie を設定できます。Cookie コンテナがある限り、これによりユーザーのログインが可能になります。

于 2008-10-28T19:48:04.420 に答える