Сообщение 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.
зиг>>>я согласна даже на чтонибудь типа рефлексией изменять уровень пропагации этого метода ТОЛЬКО для тестирования. но чтоб в продакшне был код без изменений. такое возможно?
.>>Можно создать тестовый 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.
зиг>>>я согласна даже на чтонибудь типа рефлексией изменять уровень пропагации этого метода ТОЛЬКО для тестирования. но чтоб в продакшне был код без изменений. такое возможно?
.>>Можно создать тестовый Spring контекст, который тупо игнорирует все Transactional-атрибуты и управлять транзакциями самому, вручную, внутри теста.
.>>Очевидно, надо будет учесть, что такой тест не сможет тестировать всё, т.к. явно может существовать бизнес-логика, которая требует наличие таких атрибуов (unhappy paths, когда что-то кидает исключение и надо что-то закоммитить, а что-то не коммитить). Но для этого можно делать другие тесты, которые воспроизводят контекст более точно...
зиг>имеешь ввиду не создавать txManager в текущем тестовом спринговом контексте, соотственно все транзакшнл аннотации будут игнорироваться?
зиг>а транзакцию в тесте сздавать самим вручную вначале и роллбечить в конце?помоему это не будет работать
Spring контекст где-то содержит код (тег <tx:annotation-driven>), который проверяет наличие @Transactional на бинах контекста и создаёт прокси-объекты, которые шлют соответствующие команды txManager-у.
Вот это тебе надо выбросить из тестового конфига и послать команду txManager-у самому. В setUp методе на начало транзации (getTransaction) и tearDown на откат (rollback).
What could possibly go wrong.