我想學習如何嘲笑我的通用知識庫,所以我可以單元測試我所有的服務。NHibernate的單元測試嘲笑/在內存數據庫
即時通訊使用流利的NHibernate來處理數據訪問和依賴性的Ninject(我不感興趣測試是)
我的倉庫界面看起來像:
public interface IRepository<TEntity> where TEntity : class
{
IQueryable<TEntity> GetAll();
TEntity Get(int key);
void Insert(TEntity entity);
void Update(TEntity entity);
void Delete(int id);
}
和實際儲存庫的樣子:
public class GenerRepository<TEntity> : IRepository<TEntity>where TEntity : Entity
{
protected ISession Session{get { return NHibernateHelper.OpenSession(); }}
public IQueryable<TEntity> GetAll(){return Session.Query<TEntity>();}
public TEntity Get(int key){return Session.Get<TEntity>(key);}
public void Insert(TEntity entity){Session.Save(entity);}
public void Update(TEntity entity){Session.Update(entity);}
public void Delete(int id){Session.Delete(Session.Load<TEntity>(id));}
}
我所有的服務都做了以下操作,將創建的存儲庫加入並使用它。
我已經閱讀了很多關於如何做到這一點的文章,但沒有一篇很簡單,也沒有很好的解釋。所以建立一個測試通用知識庫或者甚至嘲笑它的任何建議。我也有興趣創建一個內存數據庫,但是如何在我的測試項目中爲流利的nhibernate設置配置,而無需在我的真實項目中編輯代碼?
是否有可能使通用存儲庫碰到Tentity列表而不是數據庫或內存數據庫。
感謝您的閱讀並期待您的建議。
這是可能的。如果你這樣做,請注意LINQ提供者的方式比LINQ 2 Objects更受限制,這意味着你最終可能會針對'List'進行單元測試,並且在查詢數據庫時應用程序崩潰。 –
啊,謝謝你,那麼你會如何建議我來測試一下?你能給我提供一個例子嗎? – LmC
也許這是對單元測試的'純粹'(因爲它進入了一個簡單的集成測試領域),但我通常使用[內存中的SQLite數據庫](http:// ayende。COM /博客/ 3983/NHibernate的單元測試)。使用最新的NHibernate和驅動程序,我沒有一個NHibernate LINQ查詢會在SQLite上失敗(在SQL Server上工作時)。 –