在我在我的控制器的操作方法如下代碼:Controller.User是空單元測試
if (User.Identity.IsAuthenticated)
{
// ...
}
這似乎很好地工作。但是當我運行一個調用此操作的單元測試時,它會失敗,因爲User
爲空?
任何人都可以提出處理這個問題的最佳方法嗎?我是否必須爲單元測試重構此代碼?
在我在我的控制器的操作方法如下代碼:Controller.User是空單元測試
if (User.Identity.IsAuthenticated)
{
// ...
}
這似乎很好地工作。但是當我運行一個調用此操作的單元測試時,它會失敗,因爲User
爲空?
任何人都可以提出處理這個問題的最佳方法嗎?我是否必須爲單元測試重構此代碼?
您可能需要將用戶屬性設置爲設置的一部分。你可以通過ControllerContext
來嘲笑HttpContextBase
來創建控制器,以便返回你的模擬用戶。將你的模擬ControllerContext
設置爲ControllerContext
屬性,如果你已經正確配置了對象圖,它會找到User
。
的Controller
類的User
屬性是從當前HttpContext
複製的 - 你必須提供一個框架,並且設置適當的User
有這個在您的單元測試工作。
如果您運行網絡請求上下文的以外的代碼,用戶將爲空。這聽起來像你正在直接對你的方法進行測試。
您有兩種選擇。
對於您的問題(但不一定是最可持續的修復),最快的修復方法是簡單地將您的運行網站作爲WebRequest從單元測試中調用。
更可持續的修復方法是將您對環境相關服務器端功能(如User
)的使用收集到一個您可以模擬/僞造的類中。
編輯
任何人都可以提出來對付它的最好方法?我是否必須爲單元測試重構此代碼?
底線答案是「是」。更重要的是,你可能想要,因爲它會讓你的系統長期更靈活和/或可維護。