Как проверить откат работает как положено? - PullRequest
2 голосов
/ 15 ноября 2011

Я пытаюсь написать интеграционный / модульный тест, в котором исключение применяется к DAO после выполнения сохранения - для проверки поведения отката. Я думал о том, чтобы создать аспект Spring AOP и применить совет @AfterReturning к методу save в DAO.

DAO уже проксируется через @Transactional advice.

Это похоже на правильный путь?

Пока что я пытаюсь использовать Spring ProxyFactory - для прокси DAO в модульном тесте.

1009 * Е.Г. *

 ProxyFactory pf = new ProxyFactory(new MyFaultInjectingAspect());
 pf.setTarget(myDao);
 MyDao proxiedDao = (BookmarkDao) pf.getProxy();

Спасибо.

К вашему сведению: относится к этому Можно ли использовать DataSourceTransactionManager для сохранения ORM вместо HibernateTransactionManager?

Ответы [ 3 ]

1 голос
/ 15 ноября 2011

Со стороны вашей БД вы можете выполнить блокировку, используя select для обновления.

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

И попробуйте выполнить коммит с вашим приложением, вы должны увидеть исключение отката транзакции, но по другой причине.

обновленная ссылка.

1 голос
/ 15 ноября 2011

Я предполагаю, что есть другой подход без AOP, который действительно проверяет, что ничего не записано в БД:

Если у вас есть тест, который проверяет (если нет исключения)транзакция фиксируется, и объект записывается в БД, тогда вам нужен только простой второй тест.

В этом тесте вы должны сделать то же самое, но с исключением.И тогда вы должны только убедиться, что запись записана в БД.Таким образом, вам не нужен AOP Stuff, и ваш тест становится более значимым, потому что в итоге он проверяет то, что вы действительно хотите.( Надеюсь, я правильно понимаю, что возвращение роли - это всего лишь техника, запрещающая изменение базы данных. )

0 голосов
/ 15 ноября 2011
...