2010-12-12 51 views
4

我正在構建一個允許用戶註冊的ASP.NET MVC 3站點。爲此,我使用內置(靜態)Membership類;有人說它臃腫,但它運作良好,很容易,所以你有。如何在ASP.NET MVC中模擬Membership類以啓用測試

無論如何,我已經開始寫和AdminService類,它將處理用戶帳戶相關的功能,讓我們假設一個疑問,它只有一個方法:

public class AdminService : IAdminService 
{ 
    public void DeleteUser(string username) 
    { 
     Membership.DeleteUser(username); 
    } 
} 

使用Membership類這樣的錯2種方式:它不能通過IoC注入,我發現越來越難編寫IAdminService的規範(測試),因爲我無法模擬Membership類。

有沒有辦法使ASP.NET會員類的測試友好和依賴注入友好而不滾動我自己?

當涉及到的功能,Membership類效果很好,更重要的是,它的工作原理 現在,所以我真的很捨不得,開始寫我自己的MembershipProvider,因爲它只會慢下來。

回答

3

如果您創建了非空的ASP.NET MVC 3項目,您的模型文件夾中將會有AccountModels.cs文件。它包含一個示例如何處理成員資格以啓用單元測試:

public interface IMembershipService 
{ 
    int MinPasswordLength { get; } 

    bool ValidateUser(string userName, string password); 
    MembershipCreateStatus CreateUser(string userName, string password, string email); 
    bool ChangePassword(string userName, string oldPassword, string newPassword); 
} 
+0

感謝UserControl;我通常從一個自制的「模板」開始,並且完全忘記了IMembershipService接口。 – 2010-12-12 17:51:30

0

當我創建一個MVC站點時,也出現了這種情況,最終導致我自己的(可測試的)提供者。

這就是說,一個選擇是從here提取樣本實現 - 你可以(理論上)只是構建一個FakeProvider,並且硬編碼各種返回方法而不是SQL數據庫。

其中一種方法的總數非常少,並且在您想要僞造這些方法時不會有什麼壞處。

相關問題