spock,在Spring bean中模拟方法响应

时间:2018-11-28 19:57:22

标签: spring spock

我在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()方法的执行

1 个答案:

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

仅此而已。似乎很简单。