[英]Unit test method with HttpContext
public SupportedBrowser GetBrowser()
{
string agent = HttpContext.Current.Request.Headers["User-Agent"];
if (agent.Contains("iPad"))
{
return new iPad();
}
else
return new InternetExplorer7();
}
我使用 Microsoft 的單元測試工具(MS-Test?)為上述方法設置了單元測試。 因為單元測試不是web站點,所以沒有HttpContext。 我可以想到兩個解決方案:
A. 添加一個可選參數: GetBrowser(bool debug = false)
。 這允許當前代碼在不重構的情況下執行。 然后在調試為真時修改該方法以創建模擬上下文或硬編碼用戶代理。
B. 添加依賴注入。 從其他地方獲取上下文。 不過,我認為我需要通過 ninject 加入 IoC 以使其自動化。 那是很多工作。
你能想出更好的東西或改進這些想法嗎?
請注意,此方法位於 class 庫中。 我想保持這種狀態。
您的代理字符串是 mocking 的自然位置。 與其從該方法內的請求上下文中獲取代理字符串,不如將其傳遞或注入到方法/類中。 這樣您就可以在測試和運行時控制它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.