2010-03-23 57 views
1

好之外,這裏是我的問題...Fleunt NHibernate的工作不NUnit的測試夾具

我創建使用RTM流利NHibernate的數據層。我創建會話的代碼如下所示:

_session = Fluently.Configure(). 
Database(SQLiteConfiguration.Standard.UsingFile("Data.s3db"))     
         .Mappings(m => 
         { 
         m.FluentMappings.AddFromAssemblyOf<ProductMap>(); 
         m.FluentMappings.AddFromAssemblyOf<ProductLogMap>(); 
         }) 
         .ExposeConfiguration(BuildSchema) 
         .BuildSessionFactory(); 

當我引用模塊中的測試項目,然後創建一個測試夾具,看起來是這樣的:

[Test] 
    public void CanAddProduct() 
    { 
     var product = new Product {Code = "9", Name = "Test 9"}; 
     IProductRepository repository = new ProductRepository(); 

     repository.AddProduct(product); 

     using (ISession session = OrmHelper.OpenSession()) 
     { 
      var fromDb = session.Get<Product>(product.Id); 

      Assert.IsNotNull(fromDb); 
      Assert.AreNotSame(fromDb, product); 
      Assert.AreEqual(fromDb.Id, product.Id); 
     } 

我測試通過。當我打開已創建的SQLite數據庫時,其中包含代碼9的新產品。 Product和ProductLog的表格就在那裏。

現在,當我創建一個新的控制檯應用程序,並引用同一個庫,做這樣的事情:

 Product product = new Product() {Code = "10", Name = "Hello"}; 
     IProductRepository repository = new ProductRepository(); 
     repository.AddProduct(product); 

     Console.WriteLine(product.Id); 

     Console.ReadLine(); 

它不工作。我其實非常討厭的異常鏈。爲了節省你很多頭痛的,這裏是概要:

頂級例外:

同時創造一個SessionFactory使用了無效的或不完整的配置。檢查PotentialReasons集合,的InnerException更多細節\ r \ n \ r \ n

的PotentialReasons集合爲空

內部異常:

在裝配系統的IDbCommand和的IDbConnection實施無法找到.Data.SQLite。確保大會System.Data.SQLite位於應用程序目錄中或在全局程序集緩存。如果程序集是在GAC,使用元素的應用程序配置文件中指定組件的全名。

兩個單元測試庫和控制檯應用程序中引用System.Data.SQLite的確切相同的版本。兩個項目在調試文件夾中都有完全相同的DLL。我甚至嘗試將SQLite DB創建的單元測試庫複製到控制檯應用程序的調試目錄中,並刪除了構建模式行,但仍然失敗

如果任何人都可以幫助我弄清楚爲什麼這不會在我之外工作單元測試它將不勝感激。這個瘋狂的bug讓我停滯不前。

回答

2

如果你是一個64倍的操作系統,請嘗試將編譯器編譯選項的x86。

+0

我的上帝Berryl,你是個天才......任何想法,在文檔中我能找到嗎? – thorkia 2010-03-23 02:57:14

+0

沒有。我覺得它幾乎和你一樣痛苦。什麼一拖,呃? – Berryl 2010-03-23 03:15:14

+0

是啊,一個總阻力......我花了幾個小時嘗試之前我還以爲有人已經知道是什麼問題 – thorkia 2010-03-23 03:16:06