jamesfredley commented on issue #12602:
URL: https://github.com/apache/grails-core/issues/12602#issuecomment-3936180512

   This appears to be a Spring test context lifecycle issue rather than a GORM 
bug. When `@SpringBean` is used, Spock creates a separate Spring application 
context for each specification that uses different mock beans. However, GORM's 
static enhancer (which attaches dynamic finders, `withTransaction`, etc. to 
domain classes) retains a reference to the `SessionFactory` from the **first** 
context. When Spring creates a second context, that original `SessionFactory` 
has been closed, but the enhancer still points to it - causing "No Session 
found for current thread."
   
   The fix is to annotate your test classes with `@DirtiesContext`, which tells 
Spring to close and recreate the application context after the test class runs, 
ensuring the next test gets a clean context with a fresh GORM enhancer binding:
   
   ```groovy
   import org.springframework.test.annotation.DirtiesContext
   
   @DirtiesContext
   class VehicleServiceTest extends Specification {
       @SpringBean
       SomeService someService = Mock()
       // ...
   }
   
   @DirtiesContext
   class ManufacturerServiceTest extends Specification {
       @SpringBean
       AnotherService anotherService = Mock()
       // ...
   }
   ```
   
   This ensures each test specification gets its own fully initialized context 
with a properly bound GORM `SessionFactory`. The tradeoff is slightly slower 
test execution since contexts aren't cached across specs, but it's the correct 
approach when `@SpringBean` modifies the context.
   
   Alternatively, if you can share the same set of mock beans across tests, put 
them in a common base class or use `@ContextConfiguration` with a shared config 
- that way Spring can reuse the context without conflict.


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to