boardbloke opened a new issue, #14920:
URL: https://github.com/apache/grails-core/issues/14920

   ### Feature description
   
   If we run a Grails application the OISV pattern means that we always have a 
HibernateSession associated with the thread.
   
   INSERT and SELECT calls inside a service class that are not marked 
@Transactional will work because a transaction is not mandatory.  For an INSERT 
you can call domainObject.save() and that will not complain, but if you call 
DomainObject.save(flush:true) it will complain that you need to have a 
transaction.  So far so good.
   
   However in an integration test if you do not have the @Rollabck annotation 
you have neither a Session nor a Transaction.  If in an integration test you 
call an application method that does a SELECT - i.e. something that works in a 
running application - the integration test will fail with "No HibernateSession 
bound to thread.
   
   If on the other hand, if you add a @Rollback annotation to the test, that 
provides a session, but also starts a transaction. In that case a service 
method in the application that does not have @Transaction, but does 
DomainObject.save(flush:true) will fail in the application at runtime, but 
succeed in the integration test - because there is a transaction provided by 
the test.
   
   So - as far as I am aware - its not immediately easy to have an integration 
test that runs application code with the same transactional context that the 
application has.  Depending on whether you add @Rollback or not you can get 
tests that fail when thy should pass and vice versa.
   
   Best I could come up with is to not have @Rollback on the integration test 
and spray a lot of `DomainObject.withNewSession { test code here}` into the 
test - but that is horrible if using Spock.
   
   It would be nice if by default the integration test bound a HIbernateSession 
to the test thread - i.e. provide a transaction context that aligns with the 
application.
   
   If not by default then perhaps as an annotation @WithSession - or similar
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@grails.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to