2010-08-17 3 views
6

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

Тестовый чехол для извлечения данных из 1-й базы данных написан и работает без ошибок, но записи не хранятся во второй базе данных.

Реализация

Класс 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(), чтобы проверить функциональность, полный поток работает идеально, за исключением, что записи не объединены и никаких ошибок не выбрасывается.

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

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

ответ

6

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

Из JavaDoc:

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

+0

Спасибо 4 ур ответа. Мы установили значение defaultRollback как false в классе класса TestCase и не дали никакого другого отката для уровней метода. Но только в том случае, когда он работает, добавляется метод @Transactional to doStore(). Мы можем видеть, что вставляемые запросы печатаются только в этом случае, и аннота doStore удаляется, даже при запросе em.merge() не выдается ни одного запроса на вставку. Но мы не смогли сделать это изменение, как в нашем классе замороженных фреймов. Любая помощь будет заметна. !! – raksja