2012-07-02 36 views
0

我在我的控制器調用的Authentication類中有以下方法。我知道控制器本身可以調用SetAuthCookie,但我更喜歡額外的抽象。我該如何測試一個只調用FormsAuthentication.SetAuthCookie()的方法?

public void FormsAuthSignIn(string loginName, bool rememberMe = false) 
{ 
    FormsAuthentication.SetAuthCookie(loginName, rememberMe); 
} 

只是在對象瀏覽器看FormsAuthentication顯示沒有成員,我可以用它來看看這工作?我應該使用Authorize屬性構建一個測試控制器,並在我的測試中調用一個方法嗎?我應該在這裏做什麼?

回答

1

我相信唯一要做的是單元測試這裏是SetAuthCookie被調用了正確的參數。你不需要測試FormsAuthentication的邏輯。

這可以通過在接口後面隱藏FormsAuthentication來實現,併爲測試實現自己的存根,以便對方法進行計數。
任何嘲笑框架將幫助你完成這項任務,而鼴鼠/ Typemock隔離器等可以讓你直接模擬SetAuthCookie

除此之外,恕我直言,在這種情況下:

public class MyClass 
{ 
    public int Foo() 
    { 
     return Bar(); 
    } 

    private int Bar() 
    { 
     return BarInner(); 
    } 

    private int BarInner() 
    { 
     return BarInnerer(); 
    } 

    private int BarInnerer() 
    { 
     return 42; 
    } 
} 

只有Foo應該得到測試 - 所有其他方法的實現細節
與此情況相同 - 應對FormsAuthSignIn的調用者進行測試,該測試聲明FormsAuthSignIn在正確的情況下被調用。

0

我同意@ seldary的答案,測試對靜態方法的任何調用的一般方法是在你自己的類中抽象出該調用,併爲此提供一個接口。

但是,如果你不想修改你的產品代碼,還有另外一種方法(可以說不那麼「純」):一些模擬框架使用黑客來解決這種確切的情況,通過允許你調用靜態方法。

看PowerMock例如:http://code.google.com/p/powermock/

這是一個教程使用它:http://www.michaelminella.com/testing/how-to-mock-static-methods.html

(PS:我說「少純」作爲Powermock正在玩的類加載器,有時不被認爲是善於利用嘲笑,尤其是倫敦學派的嘲弄者)

相關問題