Как откатить один метод и зафиксировать второй в тесте - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть некоторый код, подобный следующему

@Test
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void testCallDb() {
    rollbackThis();
    commitThis();
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Commmit
public void commitThis() {
    //do some work and commit
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Rollback
public void rollbackThis() {
    //do some work and rollback
}

Когда я запускаю это, он всегда откатывает оба метода, то есть он не фиксирует данные метода commitThis().Если я поставлю @Commit на testCallDb(), то оба метода будут зафиксированы, включая метод rollbackThis(), который я хочу откатить.

Есть ли какое-либо решение для этого, используя аннотации Spring (предпочтительно) или используякакой-то другой метод?

Обновление: В качестве решения я использовал предложение @ Huy, то есть удалил аннотации из commitThis() и rollbackThis() и изменил тело testCallDb() на:

rollbackThis();
TestTransaction.flagForRollback();
TestTransaction.end();
TestTransaction.start();
TestTransaction.flagForCommit();
commitThis();

1 Ответ

0 голосов
/ 24 сентября 2018

Начиная с Spring Framework 4.1, вы можете программно взаимодействовать с управляемыми тестами транзакциями, используя статические методы в TestTransaction.

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/transaction/TestTransaction.html

Надеюсь, это поможет в вашем случае.

...