Jeśli planujesz korzystać ze Spock, aby pisać testy integracyjne w Spring Boot 3 (w moim przypadku 3.2.2) to mam dla Ciebie ostrzeżenie. Jeśli w swoim narzędziu budowania będziesz miał wpis:

1
2
3
4
5
6
<dependency>
    <groupId>org.spockframework</groupId>
    <artifactId>spock-spring</artifactId>
    <version>2.3-groovy-4.0</version>
    <scope>test</scope>
</dependency>

To niestety twój test, podobny do tego niżej, nie przejdzie.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@SpringBootTest(classes = [ParkingSpotConfig.class])
class ParkingOnParkingSpotIT extends Specification {
  
  @Autowired
  ParkingOnParkingSpot parkingOnParkingSpot
  
  def justArticleExampleTest() {
    when:
      parkingOnParkingSpot.park(new ParkVehicleCommand(anyParkingSpotId(), vehicleWithSize(1)))
    
    then:
      // assertions
  }
  
}

Dlaczego? Bo dostaniesz NullPointerException.

1
2
3
java.lang.NullPointerException: Cannot invoke method park() on null object

	at pl.cezarysanecki.parkingdomain.parking.application.ParkingOnParkingSpotIT.justArticleExampleTest(ParkingOnParkingSpotIT.groovy:21)

Jest to spowodowane tym, że org.spockframework:spock-spring:2.3 nie ogarnia współpracy z @SpringBootTest dla Spring Boot 3. Musimy się podbić do nowszej wersji np. 2.4-M1-groovy-2.5 i test bez żadnego “ale” zacznie śmigać.