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ć.