Информация об изменениях

Сообщение Re[3]: транзакции и тестирование от 26.01.2015 18:20

Изменено 26.01.2015 18:22 ·

Здравствуйте, зиг, Вы писали:

зиг>>>я согласна даже на чтонибудь типа рефлексией изменять уровень пропагации этого метода ТОЛЬКО для тестирования. но чтоб в продакшне был код без изменений. такое возможно?

.>>Можно создать тестовый Spring контекст, который тупо игнорирует все Transactional-атрибуты и управлять транзакциями самому, вручную, внутри теста.
.>>Очевидно, надо будет учесть, что такой тест не сможет тестировать всё, т.к. явно может существовать бизнес-логика, которая требует наличие таких атрибуов (unhappy paths, когда что-то кидает исключение и надо что-то закоммитить, а что-то не коммитить). Но для этого можно делать другие тесты, которые воспроизводят контекст более точно...

зиг>имеешь ввиду не создавать txManager в текущем тестовом спринговом контексте, соотственно все транзакшнл аннотации будут игнорироваться?

зиг>а транзакцию в тесте сздавать самим вручную вначале и роллбечить в конце?помоему это не будет работать
Spring контекст где-то содержит код (тег <tx:annotation-driven>), который проверяет наличие @Transactional на бинах контекста и создаёт прокси-объекты, которые шлют соответствующие команды txManager-у.
Вот это тебе надо выбросить из тестового конфига и послать команду txManager-у самому в setUp методе на начало транзации (getTransaction) и tearDown на откат (rollback).

What could possibly go wrong.
Re[3]: транзакции и тестирование
Здравствуйте, зиг, Вы писали:

зиг>>>я согласна даже на чтонибудь типа рефлексией изменять уровень пропагации этого метода ТОЛЬКО для тестирования. но чтоб в продакшне был код без изменений. такое возможно?

.>>Можно создать тестовый Spring контекст, который тупо игнорирует все Transactional-атрибуты и управлять транзакциями самому, вручную, внутри теста.
.>>Очевидно, надо будет учесть, что такой тест не сможет тестировать всё, т.к. явно может существовать бизнес-логика, которая требует наличие таких атрибуов (unhappy paths, когда что-то кидает исключение и надо что-то закоммитить, а что-то не коммитить). Но для этого можно делать другие тесты, которые воспроизводят контекст более точно...

зиг>имеешь ввиду не создавать txManager в текущем тестовом спринговом контексте, соотственно все транзакшнл аннотации будут игнорироваться?

зиг>а транзакцию в тесте сздавать самим вручную вначале и роллбечить в конце?помоему это не будет работать
Spring контекст где-то содержит код (тег <tx:annotation-driven>), который проверяет наличие @Transactional на бинах контекста и создаёт прокси-объекты, которые шлют соответствующие команды txManager-у.
Вот это тебе надо выбросить из тестового конфига и послать команду txManager-у самому. В setUp методе на начало транзации (getTransaction) и tearDown на откат (rollback).

What could possibly go wrong.