我正在使用MVP模式處理ASP.NET WebForm應用程序。對於每個Web窗體,都有一個Presenter類關聯來處理UI和業務邏輯。不過,由於在演示者中使用了會話值,因此在爲演示者編寫單元測試時遇到了問題。在執行單元測試期間不存在HTTP上下文(順便說一下,我使用nUnit),這使得爲演示者編寫單元測試是不可能的。ASP.NET Web測試演示者表單
任何人都可以解釋如何單元測試這些演示者?
感謝
我正在使用MVP模式處理ASP.NET WebForm應用程序。對於每個Web窗體,都有一個Presenter類關聯來處理UI和業務邏輯。不過,由於在演示者中使用了會話值,因此在爲演示者編寫單元測試時遇到了問題。在執行單元測試期間不存在HTTP上下文(順便說一下,我使用nUnit),這使得爲演示者編寫單元測試是不可能的。ASP.NET Web測試演示者表單
任何人都可以解釋如何單元測試這些演示者?
感謝
您可以模擬或存根出IHttpContext,讓你的框架注入真正的HttpContext或者你可以用會話,餅乾,......背後的一些接口狀態,或者你可以使用「鼴鼠」來自Pex,接口說明在這裏http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx
您可以更改您的Presenter類以對HttpContextBase進行依賴。一旦完成,您可以提供模擬版本的HttpContext給您的演示者類進行測試。在生產中,您只需提供HttpContext.Current屬性。
嗯,我會建議另一種方法。 我認爲你的演示者不應該知道HttpContext,PageLifeCycle等,因爲你必須單獨測試它。因此,不要嘗試模擬IHttpContext,嘗試提取演示者中需要的值(不需要整個httpcontext對象,只需要來自會話,cookie等的一些值),並通過演示者構造函數注入演示者。現在你可以正確地測試它。
乾杯
我知道這是一個有點老問題,但你能告訴我爲什麼你的主持人訪問Sessoin對象?我的意思是你可以傳遞來自視圖的Session值,你不需要依賴於HttpContext,因此不需要嘲笑。我問,因爲我是新來的這個東西。 – jim 2012-03-28 08:51:01