2008-12-14 65 views
46

我正在以測試驅動的方式處理ASP.NET MVC解決方案,並且想使用表單身份驗證將用戶登錄到我的應用程序。我想在控制器落得代碼看起來是這樣的:我如何測試使用FormsAuthentication的ASP.NET MVC控制器?

FormsAuthentication.SetAuthCookie(userName, false); 

我的問題是我怎麼寫一個測試來證明這個代碼?

有沒有辦法檢查SetAuthCookie方法是否被調用了正確的參數?

有沒有任何方法注入假/模擬FormsAuthentication?

回答

66

我會寫一個接口和一個包裝類,將封裝這一邏輯,然後使用該接口在我的控制器啓動:

public interface IAuth 
{ 
    void DoAuth(string userName, bool remember); 
} 

public class FormsAuthWrapper : IAuth 
{ 
    public void DoAuth(string userName, bool remember) 
    { 
     FormsAuthentication.SetAuthCookie(userName, remember); 
    } 
} 

public class MyController : Controller 
{ 
    private readonly IAuth _auth; 

    public MyController(IAuth auth) 
    { 
     _auth = auth; 
    } 

} 

現在IAuth可以在一個單元測試很容易地嘲笑和驗證控制器調用其上的預期方法。我不會單元測試FormsAuthWrapper課程,因爲它只是將呼叫委託給FormsAuthentication,該課程完成了它應該做的事情(微軟保證:-))。

+2

對此,不要測試其他人的框架,只是你對他們的使用。我們在我們的應用程序中執行相同的(類似的)事情(包裝FormsAuth的東西等) – chadmyers 2008-12-14 16:16:45

相關問題