2011-05-03 49 views
0

我是NHibernate和單元測試新手。我試圖按照NHibernate的夏季視頻。當任何子表中沒有相關數據時,我可以成功地針對我的成員(視頻使用客戶對象,我使用成員)對象運行單元測試。然而,當有任何的子表的單元測試失敗,但以下情況例外的任何相關記錄:(不要急於下結論還)NHibernate單元測試夏季拆解

Setup.CanGetMemberByFirstName.TearDown 

Failures 

Exception 
System.Data.SqlClient.SqlException: The DELETE statement conflicted with the 
REFERENCE 
constraint "FK_tblTransaction_tblMembers". The conflict occurred in database "TempPP2", 
table "dbo.tblTransaction", column 'MemberID'. 
The statement has been terminated. 
Errors: System.Data.SqlClient.SqlErrorCollection 
Class: 16 
LineNumber: 1 
Number: 547 
Procedure: 
Server: SOFTWARE2\SQL2008E 
State: 0 
ErrorCode: -2146232060 
TargetSite: Void PerformDbOperation(NDbUnit.Core.DbOperationFlag) 
HelpLink: null 
    at NDbUnit.Core.NDbUnitTest.PerformDbOperation(DbOperationFlag dbOperationFlag) 
    at Microdesk.Utility.UnitTest.DatabaseUnitTestBase.LoadDatabase(String connectionString, String schemaFilePathName, String datasetFilePathName, DatabaseClientType clientType) 
    at Microdesk.Utility.UnitTest.DatabaseUnitTestBase.LoadTestDatabase() 
    at Microdesk.Utility.UnitTest.DatabaseUnitTestBase.DatabaseSetUp() 
    at PPDataTest.UnitTest.Setup() 

現在的例外是很明顯的。看來在tblTransaction表中有一個成員正被刪除並有一個子記錄。但是,被調用的方法(CanGetMemberByFirstName)只運行一條select語句。

<Test()> _  
Public Sub CanGetMemberByFirstName() 
    Const MEMBER_FIRSTNAME As String = "ERIC" 
    Dim members As IList(Of Member) = _provider.GetMembersByFirstName(MEMBER_FIRSTNAME) 
    For Each m As Member In members 
     Assert.AreEqual(MEMBER_FIRSTNAME, m.FirstName) 
    Next 
End Sub 

拆卸方法可能是delete語句發生的地方,但我不知道如何解決這個問題。總而言之,即使沒有我正在查詢的成員對象的記錄,當tblTransactions表中有相關​​記錄時,所有測試都會失敗。它正在執行CRUD操作也沒有區別,TearDown方法拋出異常。

有沒有人在跟蹤視頻時遇到類似的問題?有沒有更好的方式對數據庫/ NHibernate執行單元測試?

編輯: 據我所知,TearDown方法的目的是撤消單元測試期間執行的數據庫操作。

感謝, 埃裏克

更多信息: 測試夾具的設置方法。

<TestFixtureSetUp()> _ 
Public Sub TestFixtureSetup() 
    _provider = New PPData.DataProvider 
    DatabaseFixtureSetUp() 
End Sub 

<TestFixtureTearDown()> _ 
Public Sub TestFixtureTearDown() 
    DatabaseFixtureTearDown() 
End Sub 

<SetUp()> _ 
Public Sub Setup() 
    DatabaseSetUp() 
End Sub 

<TearDown()> _ 
Public Sub TearDown() 
    DatabaseTearDown() 
End Sub 

Private Sub GetMyTestDataXMLFile() 
    SaveTestDatabase() 
End Sub 

回答

0

事實證明,沒有將所有我的相關數據庫表映射爲對象導致的外鍵問題。