1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊
長話短說
MVC確實(shí)使用HttpRequest
, HttpContext
,HttpResponse
等。它只是不直接使用它們。
通過依賴于“基”類,它允許您替換從那些抽象類繼承的您自己的實(shí)現(xiàn)。這使我們能夠?yàn)榭刂破骰蚱渌蕾囉谏舷挛摹⒄埱蟮鹊念惥帉憜卧獪y試。
在運(yùn)行時,它獲取HttpRequest
并將其包裝在一個名為的類中,該類HttpRequestWrapper
也繼承自HttpRequestBase
,因?yàn)?code>HttpRequest不繼承自HttpRequestBase
。(和其他類的相同模式。)
從技術(shù)上講,MVC 在運(yùn)行時使用與 WebForms 相同的類。它只是不直接依賴于它們。相反,它取決于基類。在運(yùn)行時,它使用類似HttpContextWrapper
從基類繼承的包裝類,但實(shí)際上“包裝”了 , 等的HttpContext
實(shí)例HttpRequest
。
通過依賴抽象類HttpContextBase
而不是具體類HttpContext
,MVC 框架使您能夠通過提供抽象類的替代實(shí)現(xiàn)來“模擬”這些類。這是一個流行的答案。這不是很簡單,但至少不是不可能。
相比之下,使用 WebForms 進(jìn)行單元測試要困難得多。WebForms 的大部分測試策略都涉及盡可能多地遠(yuǎn)離它們并將其放在其他可測試的類中。但是當(dāng)涉及到請求、響應(yīng)、上下文等任何事情時,就很難了。顯然這并非不可能,但您必須在頁面中做一些奇怪的自定義內(nèi)容,而不是使用Context
或Page
屬性。
- 1 回答
- 0 關(guān)注
- 94 瀏覽
添加回答
舉報(bào)