Спок, издеваться над методом ответа в бобе - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть тест интеграции, написанный на groovy (спок) в приложении весенней загрузки.Один из компонентов приложения называется 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

Я хочу провести другие проверки, но не эту.В принципе, я хочу добиться этого , но со споком.Я хотел бы исключить выполнение метода validateIssueDates()

1 Ответ

0 голосов
/ 01 декабря 2018

решение с использованием Spock

Это делается с использованием [@SpringSpy] [2].
Сначала мы аннотируем поле с помощью пружинного компонента, который мы хотим обернуть в шпионский объект.Например:

@SpringSpy
private CarValidator carValidator; 

, затем в нашем тесте, в части then мы определяем, как мы хотим переопределить метод из bean / spy:

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

Решение с использованиемMockito (в качестве дополнительного подхода, это не связано с решением спока)

Я получил это довольно легко, используя spy в Mockito.Несмотря на множество проб (и ошибок) с 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;
    }
}

Вот и все.Кажется довольно простым.

...