[小菜一碟] 偽造 ClaimsIdentity 為 Controller Action 做有身份識別的單元測試

我在之前的專案有使用過 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 兩個相依的物件:ControllerContextClaimsIdentity,我選用的 Mock Framework 是 NSubstitute

Act 之後加上 Assertions,這樣一個具有身份識別的 Controller Action 單元測試就完成了。

參考資料

 < Source Code >

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學