2011-03-02 25 views
2

我剛剛完成了一個基本的asp成員資格到我的MVC項目中,我正在尋找一些測試。我嘲笑提供者有一些最初的問題,但現在已經排序了。很明顯,當提供者被嘲笑時,沒有數據存在,也不能添加任何數據,但是配置文件不能被直接模擬,因爲每次需要用戶配置文件時都會創建配置文件。我不知道如何處理測試這些(顯然)當配置文件被稱爲它返回null。測試自定義用戶配置文件以便與ASP成員資格一起使用

例如:

使用DI我的倉庫被注入:

public AccountMembershipService(MembershipProvider provider) 
    { 
     _provider = provider ?? Membership.Provider; 

    } 

而且讓我們的例子中,創建用戶方法

public MembershipCreateStatus CreateUser(string userName, string password, string email, string passwordQuestion, string passwordAnswer) 
    { 
     if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName"); 
     if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password"); 
     if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email"); 

     MembershipCreateStatus status; 
     _provider.CreateUser(userName, password, email, passwordQuestion, passwordAnswer, true, null, out status); 

     if (status == MembershipCreateStatus.Success) 
     { 
      UserProfile profile = UserProfile.GetProfile(userName); 
      profile.IPAddress = "0.0.0.0"; 
      profile.Save(); 
     } 
     return status; 
    } 

的.CreateUser完美的作品(據因爲嘲笑),但是當涉及到GetProfile顯然沒有配置文件存在,所以它只是錯誤。關於我如何能夠進行測試的任何想法?

我一直盯着這個好幾個小時了,任何幫助都會非常感謝!

+0

爲什麼不像抽象'MembershipProvider'一樣抽象'UserProfile'? – Steven 2011-03-03 10:11:48

+0

這是我最初的方法,但是因爲配置文件是在方法內部創建的,所以每個控制器不只有一個特定的UserProfile,它需要採取周界來初始化它。 - 但是你的權利,我大概可以抽象一些,但僅僅面對它似乎有點不必要。我看着它! – Henry 2011-03-03 10:36:49

+1

在我看來,你需要注入'IUserProfileFractory'。 – Steven 2011-03-03 10:56:50

回答

1

看看使用Pex Moles來替換Base UserProfile類的Create方法。

另一個選項可能是創建一個服務對象,該對象調用GetProfile(),然後可以抽象該對象,並在運行時將具體類注入AccountMembershipService,或者在單元測試期間將其傳遞給構造函數。

相關問題