我有一個測試MVC控制器結果的單元測試。不幸的是,控制器使用使用HttpContext.Request.IsLocal
的第三方庫。我無法重構第三方庫使其使用HttpContextBase
。Moqing HttpContext
我需要嘲笑這個,以便HttpContext.Request.IsLocal
返回true。任何想法如何實現這一目標?
我有一個測試MVC控制器結果的單元測試。不幸的是,控制器使用使用HttpContext.Request.IsLocal
的第三方庫。我無法重構第三方庫使其使用HttpContextBase
。Moqing HttpContext
我需要嘲笑這個,以便HttpContext.Request.IsLocal
返回true。任何想法如何實現這一目標?
如果您使用的是vs2012的高級版本或更高版本,請嘗試查看microsoft.fakes。它應該迎合你的情況。
一些閱讀:
雖然接受的解決方案對你的作品,也有一些缺點,比如在VS測試運行依賴,NUnit的使用時的一些問題,我在這裏和那裏讀(或其他框架),很難用像TeamCity這樣的構建服務器來運行這些測試。
恕我直言,更好的方法是通過您自己的墊片/包裝隔離第三方庫,並且不直接在您的代碼中使用靜態方法。
是的,它有點更多的工作,但如果以後您需要升級或替換第三方庫,那麼它會更容易 - 只會修改包裝,而您的代碼不會受到影響。
難道你不能嘲笑第三方庫嗎?不確定在單元測試中是否需要外部依賴或任何依賴。 – 2013-08-12 08:37:24
問題是,該方法是一個靜態類中的靜態方法,因此我嘲笑它的唯一辦法是創建一個假的HttpContext – Jonny
如果您使用的是vs2012的高級版本或更高版本,請嘗試查看microsoft.fakes。它應該迎合你的情況 – Slicksim