Как тестировать методы с аннотацией @Transactional - PullRequest
0 голосов
/ 18 октября 2019

Контекст

Я тестирую метод с аннотацией @Transactional.

Протестированный метод внутри бизнес-класса

@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW, rollbackFor = UniquekeyException.class)
public void saveContact(ContactDto dto) throws BadRequestException, UniquekeyException {
    Customer customer =this.authenticationFacade.getCustomerLoggedIn();
    customer.setFromDto(dto);
    this.customerRepository.save(customer);
}

ЕдиницаТест

@Autowired
private CustomerRepository customerRepository;
@Autowired
private BisinessCustomer bisinessCustomer;
@Autowired
private CustomerRepository customerRepository;
@Test
@WithMockUser(username=USERNAME, password = PASSWORD)
public void saveContactDtoTest(){
    //setup
    ContactDto contact = this.getContactDto();
    //exec
    this.bisinessCustomer.saveContactDto(contact);
    //assert
  Assert.assertEquals(this.customerRepository.findByUsername(USERNAME).getContact.getAdress(), contact.getAdress());
  //First value return null!!! When remove transactional anotation return the same that contact.getAdress()
  }

Задача

Когда я вызываю его из метода @Test, ничего не сохраняется.

Когда я удаляю аннотацию de @Transactional из целевого метода, все работает нормально и сохраняется в тесте нормально.

База данных находится в памяти, когда я запускаю тесты и использую миграцию flyway, mysql, spring, hirbernate, springboot.

Вопрос

Можно ли настроить аннотацию @Transactional дляисключить его при запуске тестов?

Спасибо.

1 Ответ

0 голосов
/ 18 октября 2019

вы можете легко использовать аннотацию @Rollback (false). см. тот же вопрос на странице здесь

...