让我们考虑一个非常简单的例子来说明我的观点:
enumerate
第一个@SpringBootTest
class Tmp extends Specification{
@Autowired
private CarService carService;
def "getCarById"(int id) {
return carService != null ? carService.getById(id) : new Car();
}
def "validate number of doors"(Car car, int expectedNrOfDoors) {
expect:
car.getNrOfDoors() == expectedNrOfDoors
where:
car || expectedNrOfDoors
getCarById(1) || 3
getCarById(2) || 3
getCarById(3) || 5
}
}
方法将被调用。然后将创建上下文,然后将执行getCarById(_)
测试。
是否可以在“一开始”创建上下文?为了能够以validate number of doors
方法访问它(和访问carService
)?
答案 0 :(得分:3)
您的示例的问题在于您尝试从CarService
块中的上下文访问where
实例。 where
块中的代码用于在早期阶段创建多个测试,非常接近类加载。
我建议仅用汽车ID替换Car
参数。然后,您在getCarById
块中调用given
。届时,将加载上下文,可以访问carService
。
@SpringBootTest
class Tmp extends Specification {
@Autowired
private CarService carService
def "validate number of doors"(int carId, int expectedNrOfDoors) {
given:
Car car = carService.getById(carId)
expect:
car.getNrOfDoors() == expectedNrOfDoors
where:
carId || expectedNrOfDoors
1 || 3
2 || 3
3 || 5
}
}