Почему мой метод @Transactional не откатывается при тестировании? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть метод @transactional, который, кажется, работает (откат), если запустить реальный сервис и предоставить входные данные, которые могут вызвать ошибку во время выполнения. Если я создаю тест для этого метода, который выдает ошибку во время выполнения, он больше не откатывается. Есть идеи, почему это не работает во время тестирования?

это что-то вроде:

@Service
public class SampleServiceImpl implements SampleService {

    private final RepoA repoA;
    private final RepoB repoB;

    public SampleServiceImpl(RepoA repoA, RepoB repoB) {
        this.repoA = repoA,
        this.repoB = repoB
    }

    @Transactional
    @Override
    public void addItems() {
        repoA.save(new ItemA(1,'name1')); //works
        repoB.save(new ItemB(2,'name2')); //throws run-time error
    }
}
@RunWith(SpringRunner.class)
@DataJpaTest
public class Tests {

    @Autowired
    private RepoA repoA;

    @Mock
    private Repob repoBMock;

    @Test
    public void whenExceptionOccurrs_thenRollsBack() {
        var service = new SampleService(repoA, repoBMock);
        Mockito.when(repoBMock.save(any(ItemB.class))).thenThrow(new RuntimeException());
        boolean exceptionThrown = false;
        try {
            service.addItems()
        } catch (Exception e) {
            exceptionThrown = true;
        }

        Assert.assertTrue(exceptionThrown);
        Assert.assertFalse(repoA.existsByName('name1')); // this assertion fails because the the first item still exists in db
    }
}

1 Ответ

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

Просто добавьте аннотацию Rollback и установите флаг в значение false.

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