spock,模拟Springbean中的方法响应
我在spring boot应用程序中用groovy(spock)编写了一个集成测试。其中一个应用程序bean称为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
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;
}
}