我想創建模擬用戶並測試是否有人沒有「經理」聲明可以訪問操作。
不,你不知道。您只想將用戶傳遞給您編寫的屬性並進行測試,即可正確設置filterContext.Result
。而已。您不需要測試System.Web.Mvc的工作方式。正在測試的單個單元!
推測你的屬性是AuthorizeAttribute
,對嗎?所以你需要測試OnAuthorization(AuthorizationContext)
。
免責聲明:我沒有用過起訂量在一段時間,但你的代碼大概看起來一般是這樣的:
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 */);
爲什麼你會測試這個?您將要驗證的是MVC自己的基礎架構。爲什麼這對你的應用有價值?如果您的邏輯(而不是MVC)受到Manager聲明的影響,情況會有所不同。然後,一個單元測試將是有意義的,並嘲笑校長等將是必要的(如果你打電話給IPrincipal.IsInRole()例如)。 – 2012-04-30 20:26:32