簡體   English   中英

Controller.User在單元測試期間為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM