2010-10-25 53 views
0

假設我已經編寫了一個擴展System.Web.Security.MempershipProvider的自定義成員資格提供程序。這是它自己的項目。流利的NHibernate單元測試

重寫的ValidateUser方法是這樣的:

IList<User> Users; 
     using (ISession sess = NHibernateHelper.GetCurrentSession()) 
     { 
      Users = sess.CreateQuery("select u from User as u where u.Username = :username and u.Password = :password") 
       .SetParameter("username", username) 
       .SetParameter("password", password) 
       .List<User>(); 
     } 
     if (Users.Count > 0) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

我在這裏使用功能NHibernate所以用的Isession對象的配置NHibernateHelper類交易。

我想單元測試這個方法使用NUnit。運行測試時,如何獲得使用不同數據庫配置(如內存中的SQLite數據庫)的方法?

+0

您不必在使用功能NHibernate – Paco 2010-10-25 14:39:28

+0

你應該使用'返回Users.Count>而不是0'用來NHibernatehelper 。 – 2013-10-07 22:04:33

回答

1

使會話可更改。

通常情況下,我會說的構造函數依賴注入,但你不能做到這一點與會員供給者(我認爲)。

所以不是怎麼樣,你可以覆蓋一個屬性,這樣

public MembershipProvider() 
{ 
    SessionProvider = new DefaultSessionProvider(); 
} 

public ISessionProvicer SessionProvider {get;set;} 
... 
IList<User> Users; 
     using (ISession sess = SessionProvider .GetSession()) 

東西然後你就可以在你的單元測試覆蓋ISessionProvider。

,可能爲更好的主意是你想單元測試從會員Proivder掉部分隔離開來,說一個叫UserLoginValidationService類。

這裏多一些使用功能NHibernate和內存數據庫:Fluent NHibernate gotchas when testing with an in memory database.