[英]Controller.User is Null During Unit Test
我的控制器操作方法中有以下代碼:
if (User.Identity.IsAuthenticated)
{
// ...
}
它似乎工作正常。 但是,當我運行調用此操作的單元測試時,它失敗了,因為User
為null?
誰能建議最好的方法來解決這個問題? 我是否僅為了單元測試就必須重組此代碼?
您可能需要在設置過程中設置User屬性。 您可以通過用於創建ControllerContext
HttpContextBase
來做到這一點,以便它返回模擬的用戶。 將模擬的ControllerContext
設置為ControllerContext
屬性,如果正確配置了對象圖,它將找到User
。
Controller
類的User
屬性是從當前HttpContext
復制的-您必須提供一個上下文並在那里設置User
以使其在單元測試中正常工作。
如果您在網絡請求的上下文之外運行代碼,則用戶為null。 聽起來您正在直接在方法上運行測試。
你有兩個選擇。
解決問題的最快方法,但不一定是最可持續的解決方法,只是將單元測試中的運行網站稱為WebRequest。
更具可持續性的修補程序是將對上下文相關的服務器端功能(例如User
)的使用收集到一個可以模擬/偽造的類中。
編輯
誰能建議最好的方法來解決這個問題? 我是否僅為了單元測試就必須重組此代碼?
底線答案是“是”。 更重要的是,您可能想要這樣做,因為從長遠來看,它將使您的系統更加靈活和/或可維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.