Я пытаюсь настроить класс интеграции, который обертывает каждый тест в транзакции. Таким образом, я могу отменить транзакцию после каждого теста вместо сброса базы данных перед каждым тестом.Вложенные транзакции для интеграционных тестов с использованием Rhino Commons UnitOfWork
Я также хочу, чтобы иметь возможность использовать транзакции в самих тестах интеграции.
Я использую NHibernate и Rhino Commons UnitOfWork для проекта. Я использую MSTest для тестов.
Я хочу что-то вроде этого:
[TestInitialize]
public void TestInit() {
// create outer transaction scope
UnitOfWork.Start();
UnitOfWork.Current.BeginTransaction();
}
[TestCleanup]
public void TestCleanup() {
// rollback outer transaction
UnitOfWork.Current.Dispose();
}
[TestMethod]
public void IntegrationTest() {
using (UnitOfWork.Start(UnitOfWorkNestingOptions.CreateNewOrNestUnitOfWork)) {
UnitOfWork.Current.BeginTransaction();
// integration test code
UnitOfWork.Current.TransactionalFlush();
// possibly more transactions
}
}
Это первый раз, когда я использовал NHibernate, Rhino Commons и MSTest. Я не совсем понимаю поведение сессий с вложенными Rhino Commons UnitOfWork
s. То, что у меня здесь, не отменяет изменения из теста интеграции.
Я попытался с помощью TransactionScope
из System.Transactions
, но получить следующее сообщение об ошибке, когда UnitOfWork
сек конец:
System.InvalidOperationException: Отключить нельзя назвать в то время как транзакция выполняется ..
Итак, вот мои вопросы:
Есть ли способ получить это поведение с UnitOfWork в Rhino Commons? Если нет, должен ли я просто сбросить базу данных перед каждым тестом или есть другой способ развернуть транзакции, которые прекрасно сочетаются с UnitOfWork?
спасибо.