2012-12-17 41 views
1

設置方法在這裏:映射集成測試NHibernate的映射

NHibernate unit test

使用NHibernate.config:

[SetUp] 
public virtual void SetUp() 
{ 
    var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies(); 
    this.configuration = NHibernateSession.Init(
    new SimpleSessionStorage(), 
    mappingAssemblies, 
    new AutoPersistenceModelGenerator().Generate(), 
    "../../../Northwind.Web/NHibernate.config"); 
} 

這是不是有點狡猾,因爲它引入了一個外部的依賴?我想也可以編程創建NHibernate.config的東西,並將其傳遞給正確的Init方法標誌。我是否正確並在安裝過程中讓某人完成了此操作?謝謝。

回答

3

我在當前的項目中成功採用了類似的方法。首先,它不是單元,但映射集成測試,因爲外部資源即數據庫參與,測試的執行時間和典型的技術問題:

  1. 它更好不要使用存在的數據庫架構,但創建和導出它每次都從nHibernate使用配置隨機架構名稱。這將消除兩個或更多開發人員在同一模式上同時運行集成測試的可能性:

    var export = new SchemaExport(configuration); export.Execute(script:false,export:true,justDrop:false,connection:databaseConnection,exportOutput:null);

  2. 請記住在使用後清理此模式。在幾天內容易耗盡磁盤空間等。

  3. 想想將此代碼從{[SetUp]}移動到{[FixtureSetUp]}以節省測試夾具執行時間。與通常的內存單元測試執行時間相比,使用數據庫需要大量的時間

  4. 由於時間和資源消耗,開發者/ CI服務器與通常的單元測試相比可能會觸發這種測試的頻率較低。在我的項目中,他們只在夜間構建或者手動觸發構建中安排。

  5. 您可以生成在運行時NHibernate的配置,所以「../../../Northwind.Web/NHibernate.config」不需要

  6. 而是使用SQL Server,你可以使用SQLite中很多情況下,但映射通常是針對每個SQL引擎特定的

+0

謝謝。你能否提供一個爲sqllite做5(編程)的例子? – cs0815

+0

這是一個[示例](https://gist.github.com/4319926) – Akim

1

你可以按照你提到的方式編程,或者只是在你的測試項目中創建一個不同的NHibernate.Config,或者只是添加一個鏈接到項目中的實際nhibernate.config(右鍵單擊項目,添加現有項目,找到NHibernate。然後配置,而不是點擊添加做點擊旁邊的箭頭添加並選擇'添加爲鏈接')。

我會說真正不好的部分是使用生產中的NHibernate.Config來進行測試。

我過去曾經做過這樣的事情,我們會創建一個專門用於測試的數據庫(通過db遷移工具)並將其用於我們的測試。通過爲創建的數據庫詳細信息生成測試的配置文件,或生成與測試項目中的配置相匹配的數據庫。

+0

感謝Seif。你知道任何編程創建NHibernate.Config的例子嗎?謝謝。 – cs0815