Юнит-тестирование весенних облачных шлюзовых фильтров со споком - PullRequest
0 голосов
/ 10 ноября 2019

Я добавляю куки в ответ шлюза, используя реактивные глобальные фильтры, как:

chain.filter(exchange).then(<a mono relevant to response>)

Когда я пытаюсь проверить это с помощью спока , метод не вызывается из заглушкиMono.

Сам фильтр:

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    return chain.filter(exchange)
            .then(refreshCookiesMono(exchange));
}

private Mono<Void> refreshCookiesMono(ServerWebExchange exchange) {
    return Mono.fromRunnable(() -> {
        //interactions with *exchange* and *chain*
    });
}

Этот тест проходит несмотря на 0 * _ в конце:

@Subject
CookieFilter cookieFilter = new CookieFilter(cookieHelper)
...
ServerWebExchange exchange = Mock ServerWebExchange
GatewayFilterChain chain = Mock GatewayFilterChain
Mono<Void> mono = Mock Mono

...

def "cookieFilter refreshes the cookie with a new value"() {
    given:

    when:
    cookieFilter.filter(exchange, chain)

    then:
    1 * chain.filter(exchange) >> mono
    0 * _
}

Но в коде, который я вызываю .then из моно, возвращенного методом .filter .

Почему не учитывается mono.then () ? Конечно, когда я пытаюсь проверить всю основную логику - спок не находит взаимодействия.

1 Ответ

0 голосов
/ 10 ноября 2019

chain.filter(exchange) возвращает экземпляр моно, который вы высмеяли.

Вы не указали никаких ожиданий в отношении этого макета (и это ответ на ваш вопрос, яповерьте), поэтому тест на самом деле не проверяет Фильтр, он только проверяет, что был один вызов chain.filter(exchange).

Кроме того, Spock поддерживает Stubs в дополнение к Mocks, и в отличие от многих других фреймворков естьразница между ними:

Моксы "тяжелее", и вы можете выполнять их проверку (в блоке "then"), заглушки гораздо более "легки", и вы обычно можете указать их ожидания в«данный» блок. Обычно вы используете Mocks, если хотите смоделировать какое-либо взаимодействие и основывать тест на протоколе, который управляется этим взаимодействием, в других случаях предпочтительны заглушки.

...