Автоматически переносить модульные тесты в транзакцию БД?

StackOverflow https://stackoverflow.com/questions/407702

  •  03-07-2019
  •  | 
  •  

Вопрос

[Редактировать (Харен): Дублировать]

Я ищу способ автоматически обернуть мои интеграционные тесты NUnit в транзакцию БД, чтобы изменения, внесенные тестом, автоматически откатывались после завершения теста.В идеале я бы украсил определенные методы тестирования пользовательским атрибутом, который заставлял бы NUnit создавать транзакцию при запуске теста и откатывать ее после завершения теста...Я могу написать атрибут, но не знаю, где добавить для него проверку.

Размер тестовой базы данных составляет 3 ГБ, поэтому ее восстановление в начале каждого теста невозможно.Я знаю, что могу вручную создать транзакцию в теле каждого теста, но мне нужно что-то более элегантное.

Возможно, есть инструмент для переписывания IL (возможно, фреймворк AOP), который сможет сделать это за меня?У кого-нибудь есть предложения?

Это было полезно?

Решение

Есть две рекомендации.Первый — использовать атрибуты SetUp и TearDown для запуска транзакции и ее отката после завершения.Документация для этого в NUnit находится здесь:

http://www.nunit.org/index.php?p=setup&r=2.4.8

Если вы не хотите это использовать, другой вариант, который я вижу, — это закодировать его в каждом методе, но использовать экземпляр TransactionScope в операторе using для создания транзакции (провайдер должен автоматически подключиться).

Конечно, вы также можете создать экземпляр TransactionScope в методах SetUp и TearDown.

Другие советы

Не возникнут ли здесь проблемы с вложенными транзакциями?Насколько я понимаю, большинство БД не поддерживают транзакции внутри транзакций.Итак, если тестируемый код вообще использует транзакции (я думаю, если вы используете БД, поддерживающую транзакции, вы будете их использовать), тогда то, что вам действительно нужно, — это вложенные транзакции, которые (как мне сказали) больше всего БД напрямую не поддерживают.

Спринг.нет?

Я имею опыт работы с Java/JUnit, но знаю, что в Java это можно сделать с помощью Springframework.

(Вам также потребуется получить тест из ApplicationContext/BeanFactory, чтобы применить к нему AOP).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top