盡可能擺脫對HttpContext的依賴

2021-06-21 11:35:53 字數 1812 閱讀 9892

在asp.net mvc中負責「轉化資料」的層次為model binder。關於這一點,現有的「示例」大都關注把form或querystring中的資料轉化為action引數上,不過model binder可用的地方其實更多。例如在《最佳實踐》的**中,原本accountcontroller的delete方法實現如下:

public actionresult delete(string username)

this.middletier.usermanager.delete(username);

uri urlreferrer = this.request.urlreferrer;

return this.redirect(urlreferrer.tostring());

在刪除了指定物件之後,頁面將跳轉到url referrer位址中。在上面的**中,這個值將通過訪問request.urlreferer來獲得。這就使您的action方法與httpcontext產生了依賴,因此它的單元測試**就需要這樣編寫:

在單元測試**中,我們mock了乙個httpcontextbase物件,讓它的request.urlreferrer屬性返回我們準備好的物件,再構造乙個新的controllercontext並交給controller。而如果我們的urlreferrer能夠作為delete方法的引數,那麼單元測試**就會一下子簡單很多:

[testmethod()]

public void deletetest()

string username = "jeffz";

1688.blog.jp

ycbjz.blog.jp

ylbjz.blog.jp

csbjz.blog.jp

weibo.blog.jp

ncbjz.blog.jp

ykbjz.blog.jp

xybjz.blog.jp

xmbjz.blog.jp

fzbjz.blog.jp

163.blog.jp

uri urlreferrer = new uri("");

var mockcontroller = this.getmockcontroller();

mockcontroller.setup(c => c.middletier.usermanager.delete(username)).verifiable();

mockcontroller.object.delete(username, urlreferrer)...

盡可能使用 const

使用 const 的好處在於它允許指定一種語意上的約束 某種物件不能被修改 編譯器具體來實施這種約束。通過 const,你可以通知編譯器和其他程式設計師某個值要保持不變。只要是這種情況,你就要明確地使用 const 因為這樣做就可以借助編譯器的幫助確保這種約束不被破壞。對指標來說,可以指定指標本身為...

盡可能使用const

const定義語義約束 制定乙個不被改動的物件,編譯器會強制實施這項約束。只要某值保持不變時事實,就應該確實說出來,這樣編譯器可以確保這項約束不違反。const多才多藝 可以用在classes外部修飾global或namespace作用域中的常量,或修飾檔案 函式 或區塊作用於中被宣告為static...

盡可能使用const

一 中心思想 1 將某些東西宣告為const可幫助編譯器偵測出錯誤用法。const可被施加於任何作用域內的物件 函式引數 函式返回型別 函式返回型別 成員函式本體 2 編譯器強制實施bitwise constness,但你編寫程式時應該使用 概念上的常量性 3 當const和non const成員函...