2011-06-05 98 views
0

NHibernate使用XML文件將類映射到數據庫中的表。單元測試XML文件如何比程序代碼(C#,JAVA等)更簡單? NHibernate是否假定映射XML文件是自動完美的,並且不需要測試它們?NHibernate如何使單元測試簡單?

+0

您已收到一些有用的回覆。無論你是否將它們標記爲正確的答案,如果它們對你有幫助,你應該至少趕上它們。 – 2011-06-06 17:04:12

回答

0

單元測試你的DAO,它封裝你的NHibernate查詢,以驗證你的NHibernate配置/映射是否正確。

+0

如果我們不使用NHibernate,我們可以測試DAO嗎?問題是NHibernate如何進行單元測試「EASIER」。 – 2011-06-05 01:57:24

+0

總是測試DAO。 NHibernate不會讓單元測試更容易。它不是爲了。這是爲了抽象你的數據庫訪問。 – 2011-06-05 01:59:27

+0

謝謝...讚賞... – 2011-06-05 02:03:52

0

在過去的幾年中,我採取了3點不同的方法:

1 - 不要做任何測試。瞭解何時將您部署到測試服務器的映射是否正確。這並不理想。

2 - 我寫了一些代碼,使用反射,找到了我所有映射的POCO,並自動實例化它們(這是遞歸的,因此它甚至可以探索外鍵),然後從數據庫中取回它們以查看如果所有的屬性都保持正確。

3-圍繞我的Web服務編寫集成測試。我允許這些測試運行一直到數據庫的Web服務代碼。這出現了任何映射問題。

編輯 - 我提到的另一件事是,NHibnerate確實有一個很好的功能,你可以使用內存數據庫。這對於不希望嘲笑NHibnerate但不希望測試依賴於(實際)數據庫服務器的測試很有用。

+0

感謝您的回答。讚賞......但問題是「NHibernate如何使單元測試變得簡單?」 – 2011-06-05 02:01:45

1

流利NHibernate使用類而不是XML進行映射,我相信對測試有一定的支持。

0

我不知道這是否可以解決您的問題或不...基本上,如果你使用nhibernate,那麼你最好使用流利的nhibernate。它實際上使用POCO而不是hbm.xml映射來構建代理類,這使得您的生活更容易重構。

關於您的單元測試問題我自己正在尋找一些單元測試場景的線索..舉個例子如果你有一個學生屬於部門,那麼你實際上需要編寫測試用例。你不需要任何編碼來從部署手動測試。這將解決這個問題,因爲現在的手工測試這將是很多更容易導致寫作測試夾具,使u檢驗自己的代碼,無需手動檢查

這裏有一個例子

[TestFixtureSetUp] 
    public void CanMapCorrectlyStudent() 
    { 
     using (ISession session = PersistanceManager.OpenSession()) 
     { 
      new PersistenceSpecification<Student>(session) 
       .CheckProperty(c=>c.Studentid,5) 
       .CheckProperty(c => c.Name, "John") 
       .CheckProperty(c=>c.Age , 24)           
       .CheckReference(c=>c.Department,new Department { Dept_id = 1 , Dept_name="MCA" }) 
       .VerifyTheMappings(); 
     } 
    } 

,你可以找到相應的例如,在nhibernate wiki中,爲visual studio安裝testdriven.net,右鍵點擊上面提到的這個函數體並點擊run test。它會自動運行測試,爲您解放手動編碼和重新檢測測試的所有麻煩