2011-05-03 4 views
0

Я новичок в NHibernate и модульных тестах. Я пытаюсь следить за лечением NHibernate видео. Я могу успешно запускать модульные тесты в отношении моего члена (объект использования объектов с клиентом, я использовал элемент), когда нет связанных данных в любых дочерних таблицах. Однако, когда есть какие-либо связанные записи в любой из дочерних таблиц модульные тесты терпят неудачу за исключением следующего: (Не спешите с выводами пока)Лето тестов NHibernate Teardown

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 генерирует исключение.

Неужели кто-то испытывал такие же проблемы при слежении за видео? Есть ли лучший способ выполнить модульное тестирование по базе данных/NHibernate?

EDIT: Из того, что я понимаю, цель метода Teardown является Undo операций с базами данных, которые были выполнены в ходе испытания блока.

Спасибо, Эрик

Дополнительная информация: Тестовые методы установки арматуре.

<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

Оказалось, что отсутствие всех связанных со мной таблиц базы данных, отображаемых как объекты, вызывает проблемы с внешним ключом.

Смежные вопросы