0

背景:クレーム/承認にはMVC4とWIFを使用しています。モックアップオブジェクトにはMoq/MvcContribを使用しています。ここを見て、MockIdentityオブジェクトとMockPrincipalオブジェクトを作成しました-それらが必要ですか?

目標:「Manager」クレームを持つユーザーのみがアクションにアクセスできるようにするクラスレベル属性を持つコントローラークラスがあります。モックユーザーを作成し、「マネージャー」の主張を持たない人がアクションにアクセスできるかどうかをテストしたいと思います。

私はモックの概念を理解していますが、データオブジェクトをモックして扱っており、必要なことを実行するために必要なプラグイン/クラス/メソッド/セットアップを理解するのに苦労しています。

前もって感謝します。

4

1 に答える 1

3

モックユーザーを作成し、「マネージャー」の主張を持たない人がアクションにアクセスできるかどうかをテストしたいと思います。

いいえ、しません。作成した属性にユーザーを渡し、filterContext.Result正しく設定するかどうかをテストするだけです。それでおしまい。System.Web.Mvcが機能することをテストする必要はありません。テスト中の単一ユニット!

おそらくあなたの属性はAuthorizeAttribute正しいですか?したがって、テストする必要がありますOnAuthorization(AuthorizationContext)

免責事項:私はしばらくmoqを使用していませんが、コードはおそらく一般的に次のようになります。

var user = new Mock<IPrincipal>();
user.Setup(/* whatever you need to look at */);

var authContext = new Mock<AuthorizationContext>();
authContext.Setup(ac => ac.HttpContext.User).Returns(user);

var myAttribute = new RequireManagerAttribute();
myAttribute.OnAuthorization(authContext);

authContext.VerifySet(ac => ac.Result = /* whatever you expect */);
于 2012-04-29T09:31:02.113 に答える