@Transactional класса обслуживания не вызывается в тестовом контексте - PullRequest
0 голосов
/ 16 сентября 2018

Я использую Spring @Transactional в классе обслуживания моего DAO. В приложении есть bean-компоненты, сконфигурированные в XML-формате и с помощью аннотаций типа @Service.

Моя конфигурация тестового примера выглядит следующим образом:

@RunWith(SpringJunit4ClassRunner.class)
@ContextHierarchy({
    @ContextConfiguration(locations = {"classpath:spring/spring.xml"}),
    @ContextConfiguration(classes = {Service.class})
})
@ComponentScan(...)
public class TestRunner {
  @Autowired
  private Service service;

  @Test
  public void testSave() {
      service.save(...);
  }
}

Я настроил ниже в XML:

<tx:annotation-driven transaction-manager="txmManager"/>
<!-- bean for hibernate5 transaction manager using sessionfactory -->

Класс обслуживания выглядит следующим образом:

@Service
public class Service {

   @Autowired
   private DAO dao;

   @Transactional
   public Entity save(Entity entity) {
       dao.save(entity);
   }
}

Теперь все работает отлично во время запуска исходного контекста, но когда я запускаю тестовые случаи, транзакция никогда не вызывается. Примечание: Нет NPE при вызове метода Service.class.

Я подправил и заметил, что если я создаю bean-компонент для Service.class в моем (тестовом) весеннем XML-файле, тестовые сценарии работают, как и ожидалось, то есть вызывается диспетчер транзакций и база данных в памяти обновляется.

Я ожидал, что SpringJunit4ClassRunner создаст MergedContext, и конфигурация менеджера транзакций будет автоматически активирована при Service#save вызове.

Есть мысли о том, что мне здесь не хватает?

Hibernate - 5.2.6. Финал, Весна - 4.2.0. ВЫПУСК, Spring-test - 4.1.6. РЕЛИЗ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...