2011-05-03 12 views
0

나는 NHibernate와 단위 테스트에 익숙하지 않다. 나는 NHibernate 비디오의 여름을 따라하려고 시도하고있다. 자식 테이블에 관련 데이터가 없을 때 내 멤버 (비디오는 고객 개체를 사용하고 멤버는 사용) 개체에 대해 단위 테스트를 성공적으로 실행할 수 있습니다. 단위 테스트는 다음과 같은 예외와 함께 실패 자식 테이블의의 모든 관련 레코드가 때 : NHibernate Unit Tests 여름 방영

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 

분해 방법은 삭제 문이 발생하는 위치를 아마,하지만 난이 문제를 해결하는 방법을 모르겠어요. 요약하면 쿼리 할 멤버 개체에 대한 레코드가 없더라도 tblTransactions 테이블에 관련된 레코드가있을 때 모든 테스트가 실패합니다. 또한 CRUD 작업이 수행되는 동안 아무런 차이가 없으며 TearDown 메서드는 예외를 throw합니다.

동영상을 볼 때 비슷한 문제가 발생한 적이 있습니까? 데이터베이스/NHibernate에 대해 단위 테스트를 수행하는 더 좋은 방법이 있습니까?

편집 : 내가 이해에서 의 분해 방법의 목적은 단위 테스트 기간 동안 수행 된 데이터베이스 작업을 취소하는 것입니다.

감사합니다, 에릭

추가 정보 : 테스트 고정물 설치 방법.

<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

개체로 매핑 된 모든 관련 데이터베이스 테이블을 가지고 있지 않은 것이 외래 키 문제를 일으키는 것으로 나타났습니다.

관련 문제