我在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");
}
});
}
在Validator
类中,还有其他方法。在我的spock
集成测试中,我只想模拟对该特定方法的响应。通过以下方式:
Validator.validateIssueDates(_) >> null
我希望进行其他验证,但不要进行其他验证。基本上来说,我想实现this,但要用spock。我想消除validateIssueDates()
方法的执行
答案 0 :(得分:0)
Spock
使用[@SpringSpy] [2]完成。
首先,我们用要封装在间谍对象中的Spring bean注释字段。例如:
@SpringSpy
private CarValidator carValidator;
然后在我们的测试的then
部分中,我们定义如何从bean / spy覆盖方法:
then:
3 * carValidator.validateIssueDates(_) >> null
Mockito
的解决方案(作为另一种方法,它与spock解决方案无关)在spy
中使用Mockito
非常容易。尽管对spock
的{{1}}进行了许多试验(和错误),但它根本不起作用。如果我明白了,可以在这里发布。目前,我只能共享spy
解决方案:
Mockito
仅此而已。似乎很简单。