使用spock进行集成测试。在第一次测试之前加载上下文

时间:2018-11-17 14:49:49

标签: spring-boot integration-testing spock

让我们考虑一个非常简单的例子来说明我的观点:

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)?

1 个答案:

答案 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
    }
}