Я пытаюсь понять, что происходит, когда я использую AbstractTransactionalJUnit4SpringContextTests
в своих интеграционных тестах при попытке откатить изменения, сделанные устаревшим кодом.
Устаревший код использует NamedParameterJdbcTemplate
для связи с базой данных. Менеджер транзакций имеет тип DataSourceTransactionManager
, а мой источник данных имеет тип DriverManagerDataSource
.
Это общая структура моего тестового класса.
@Begin
//Make initial setup of database using `JDBCTemplate` from `AbstractTransactionalJUnit4SpringContextTests`.
@Test
//Call legacy code that makes inserts to database.
Мой вопрос заключается в том, неверно ли мое предположение, что, расширяя AbstractTransactionalJUnit4SpringContextTests
, я делаю все свои тесты транзакционными. Ожидаемый эффект заключается в том, что все изменения, сделанные непосредственно моей тестовой функцией И в унаследованном коде, вызываемом из тестовой функции, транзакционны и неявно откатываются в конце тестов???
Некоторые наблюдения, которые я сделал: Функция @Begin
работает должным образом при использовании с тестовыми функциями, которые не вызывают устаревший код, который вносит изменения. В этом случае изменения, внесенные в @Begin
, откатываются. Однако, если я использую @Begin
с функциями @Test
, вызывающими устаревший код, который вносит изменения, изменения, сделанные @Begin
и @Test
, не откатываются! Напечатанное сообщение журнала показывает, что транзакции инициированы и что откат выполнен успешно, но я не получаю ожидаемого поведения.