我在之前的專案有使用過 ASP.NET Identity 來幫我做驗證的工作,ASP.NET Identity 的出現為驗證身份的方式帶來了更大的彈性,不過如何使用不是這道菜的重點,這道料理要展現的是,當我們為 Controller Action 做有身份識別的單元測試時,我們要如何偽造不同的身份來滿足測試情境?
如果對如何使用 ASP.NET Identity 的朋友有興趣的,可以參考下面這兩篇文章。
Mock 需要 Mock 的對象
ASP.NET Identity 是以 Claims-based 來存放使用者的識別資訊,所以原則上我們不必特別去偽造 ASP.NET Identity 的什麼元件,只要偽造一組 ClaimsIdentity 就可以了。
我在我要測試的目標 Controller 定義了一個 Who
Action,這個 Who Action 會回傳一個 JsonResult,內容是告訴我使用者的資訊,裡面就有包含使用者所擁有的角色,很簡單的一個範例。
要偽造登入身份,我們只需要 Mock 兩個相依的物件:ControllerContext
、ClaimsIdentity
,我選用的 Mock Framework 是 NSubstitute。
Act 之後加上 Assertions,這樣一個具有身份識別的 Controller Action 單元測試就完成了。
參考資料
< Source Code >