Транзакция теста Junit не была зафиксирована - ошибок нет - PullRequest
6 голосов
/ 17 августа 2010

Мы реализовали JUnit4 в нашем приложении, которое использует ядро ​​Spring и JPA с DB2. Нам необходимо протестировать полную функциональность, которая извлекает данные из одной базы данных и объединяет их в другую базу данных.

Контрольный пример для извлечения данных из 1-й базы данных записан и работает безошибочно, но записи не сохраняются во 2-й базе данных.

Осуществление

В класс TestCase мы включили следующие аннотации, чтобы при необходимости выполнить тестовый пример в транзакции,

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
      DependencyInjectionTestExecutionListener.class,    
      TransactionalTestExecutionListener.class})
@ContextConfiguration(locations={""})
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false)
@Transactional

В приложении у нас есть класс менеджера для выполнения этой операции с помощью метода doSynch (). Из этого метода будет вызван метод txStore () класса crudHelper для инициализации и вызова метода doStore () (в том же классе) для слияния сущности с базой данных.

Ниже приведена декларативная транзакция в этой логике теста

TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS)
Manager doSynch() - @Transactional(propagation=Propagation.NEVER)
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED)
           doStore() - No Transactional annotation

doSynch () помечается как НИКОГДА, поскольку в этот момент ему не требуется никаких транзакций, и на следующих уровнях, таких как CRUDHelper, транзакция может быть помечена как ТРЕБУЕМАЯ, чтобы обеспечить доступность транзакции.

Задача

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

Метод Manager при вызове из JSP отлично работает. Также мы протестировали, вызвав txStore () непосредственно из тестового примера, и он также работает нормально.

Пожалуйста, сообщите нам, является ли управление транзакциями неправильным, или решение этой проблемы поможет вам. Также просьба обновить меня, если проблема или среда не ясны. Заранее спасибо. !!

1 Ответ

6 голосов
/ 17 августа 2010

Помечаете ли вы свои методы аннотацией @Rollback?

Из JavaDoc :

Тестовая аннотация, чтобы указать, действительно ли транзакция дляаннотированный метод тестирования должен быть откатан после завершения метода тестирования.Если true, транзакция будет откатываться;в противном случае транзакция будет совершена.

...