나는 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