Eu criei alguns testes unitários que se utilizam do Hibernate + Spring, facilitando e muito a minha vida para programá-los.
Mas porém, quando me deparei com algumas MATERIALIZED VIEWs do Oracle, que , somente são atualizadas quando é feito um commit, conforme foram criadas aqui no meu banco de dados, sendo assim, eu precisei fazer commit nas transações do Junit.
O que ocorre é que , eu utilizo como classe pai do meu teste unitário uma classe do Spring que controla as transações, abrindo uma para cada método de teste do TU, e faz com que em todos os momentos seja feito rollback no banco, fazendo com que meu teste unitário não reflita no banco de dados. O que me deixa com o mesmo ambiente de teste sempre, sem alteração. Esta classe é a AbstractTransactionalDataSourceSpringContextTests .
Para buscar o controle da transação corrente eu utilizei 3 métodos bem interessantes, que estão disponíveis na classe mesmo, são eles:
setComplete() -> Chamando este método antes de terminar o TU, a transação será comitada, e não será feito o rollback padrão.
endTransaction() -> Fecha, acaba com a transação atual.
startNewTransaction() -> Abre, inicia uma nova transação
Assim eu consigo efetuar o commit quando preciso, e na hora em que preciso, persistindo assim os dados no meu banco de dados. Claro, que esta situação é uma exceção, onde eu salvo os dados no banco, que por si só atualiza minha materialized view, consulto novamente os dados para validação, e depois executo um teste de exclusão dos mesmos dados inseridos, comitando também.


Últimos Comentários
(2 weeks ago)
(2 weeks ago)
(2 weeks ago)
(2 weeks ago)
(3 weeks ago)
(3 weeks ago)
(7 weeks ago)
(10 weeks ago)
(10 weeks ago)
(11 weeks ago)