我正在使用NUnit作爲測試單元。我在域上有我的接口,所以我準備在持久層中實現這些接口。我的問題是,你如何實際測試這些存儲庫的單元測試?我相信這不是直接從數據庫進行測試的好主意。我聽說過使用SQLite的人,但使用mock可以嗎?爲什麼當你可以使用實體實體提供模擬時,這個使用SQLite的內存數據庫的人呢?如何測試我的存儲庫實現?
任何例子都會受到歡迎。
注意:這是要在C#中編碼的存儲庫,它將使用NHibernate和Fluent NHibernate作爲映射。
謝謝。
我正在使用NUnit作爲測試單元。我在域上有我的接口,所以我準備在持久層中實現這些接口。我的問題是,你如何實際測試這些存儲庫的單元測試?我相信這不是直接從數據庫進行測試的好主意。我聽說過使用SQLite的人,但使用mock可以嗎?爲什麼當你可以使用實體實體提供模擬時,這個使用SQLite的內存數據庫的人呢?如何測試我的存儲庫實現?
任何例子都會受到歡迎。
注意:這是要在C#中編碼的存儲庫,它將使用NHibernate和Fluent NHibernate作爲映射。
謝謝。
這當然取決於,但在大多數情況下,我認爲通常只需在測試中模擬存儲庫並使用內存中的SQLite數據庫來測試映射(FluentNHibernate Persistence specification testing)即可。
對於使用SQLite NUnit的映射測試我使用以下的基類:
3210一個例子映射測試類從上述基類派生然後可以看起來如下:
[TestFixture]
public class MappingsTest : MappingsTestBase
{
[Test]
public void Persistence_Employee_ShouldMapCorrectly()
{
Category employee = new PersistenceSpecification<Employee>(_session)
.CheckProperty(e => e.Id, 1)
.CheckProperty(e => e.FirstName, "John")
.CheckProperty(e => e.LastName, "Doe")
.VerifyTheMappings();
...
Assert.Equals(employee.FirstName, "John");
...
}
}
就我個人而言,我會根據實際的數據庫(可能是SQL Express)對存儲庫進行功能測試。您可以每天只在CI中運行這些測試。
其他類的所有單元測試可以安全地假定存儲庫工作並使用模擬存儲庫。
編輯:以上假設您的存儲庫僅用於數據訪問;他們基本上只使用LINQ或HQL。保持他們的業務邏輯!
非常感謝。會有用的。但有一個問題,但你如何使用它?你從它派生出映射測試類?那麼在設置之後,您會構建模式並在測試之後對其進行處理?只是想知道我們在哪裏貼圖。謝謝。 – Rushino 2011-02-19 16:12:40