Летом NHibernate модульных тестов Teardown - PullRequest
0 голосов
/ 04 мая 2011

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

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) выполняет только оператор выбора.

<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

1 Ответ

0 голосов
/ 18 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...