spock,模拟Springbean中的方法响应

spock,模拟Springbean中的方法响应,spring,spock,Spring,Spock,我在spring boot应用程序中用groovy(spock)编写了一个集成测试。其中一个应用程序bean称为Validator,它具有以下方法: public void validateIssueDates(final List<Timestamp> issueDates) { issueDates.forEach(issueDate -> { final Timestamp now = Timestamp.valueOf(LocalDateTime

我在spring boot应用程序中用groovy(spock)编写了一个集成测试。其中一个应用程序bean称为
Validator
,它具有以下方法:

public void validateIssueDates(final List<Timestamp> issueDates) {
    issueDates.forEach(issueDate -> {
        final Timestamp now = Timestamp.valueOf(LocalDateTime.now());

        if (issueDate.before(now)) {
            throw new IllegalArgumentException("Issue date is before current date");
        }
    });
}
我希望进行其他验证,但不是这次。基本上,我想实现,但与斯波克。我想使用
Spock
它是用[@SpringSpy][2]完成的。
首先,我们用一个springbean对字段进行注释,我们希望将其封装在spy对象中。例如:

@SpringSpy
private CarValidator carValidator; 
然后在我们的测试中,在
然后
部分中,我们定义了我们希望如何从bean/spy重写方法:

then:
    3 * carValidator.validateIssueDates(_) >> null

使用
Mockito
的解决方案(作为附加方法,它与spock解决方案无关)
我在
Mockito
中使用
spy
非常简单。尽管对spock的spy进行了多次尝试(和错误),但它还是不想工作。如果我收到了,我会把它贴在这里。目前,我只能分享
Mockito
解决方案:

@Profile("test")
@Configuration
public class BeanConfig {

    @Bean
    @Primary
    public CarValidator getCarValidatorSpy(CarValidator validator) {
        CarValidator carValidatorSpy = Mockito.spy(validator);

        Mockito.doNothing().when(carValidatorSpy).validateIssueDates(Mockito.any(CarDto.class));
        return carValidatorSpy;
    }
}


就这些。看起来相当简单。

你应该把你的解决方案放在一个答案中,看看好的地方。完成。谢谢你的评论。
@Profile("test")
@Configuration
public class BeanConfig {

    @Bean
    @Primary
    public CarValidator getCarValidatorSpy(CarValidator validator) {
        CarValidator carValidatorSpy = Mockito.spy(validator);

        Mockito.doNothing().when(carValidatorSpy).validateIssueDates(Mockito.any(CarDto.class));
        return carValidatorSpy;
    }
}