Spring - модульное тестирование с помощью Mock - Как смоделировать пользовательский коллектор в тестовом модуле Service - PullRequest
0 голосов
/ 20 сентября 2019

У меня раздражающая проблема.

У меня есть служба (используется в RestController), которая выбирает данные из репозитория и выполняет некоторые преобразования в извлеченные данные.Я использую собственный коллектор в своем преобразовании.Таким образом, это выглядит так:

@RestController
class myController() {
    Service myService

    @GetMapping()
    void getResults{
       Collection col = myService.fetch();
       // some file download logic
    }

}

@Service
class myService() {
Repository repository
Collector myCollector

    Collection fetch() {
    return repository
        .getSomeResults()
        .stream()
        .collect(Collectors.groupingBy(someKey, myCollector)
        .values();
    }

}

Здесь, когда я хочу выполнить модульное тестирование метода обслуживания fetch (), я могу смоделировать репозиторий, но если я хочу смоделировать пользовательский сборщик, мне нужно заглушить все 5 методов.Кроме final (), другие бессмысленно издеваться.

Я не хочу уменьшать тестовое покрытие.Как мне подойти к этой проблеме?

1 Ответ

3 голосов
/ 20 сентября 2019

Идея модульного тестирования заключается в том, что вы атомарно тестируете свои методы.Но это не значит, что вам придется высмеивать каждый вызов метода внутри.

Скажем, у вас есть вызов базы данных / сетевой вызов, имеет смысл посмеяться над ним.Имеет смысл издеваться, когда ответ вашего вызываемого метода решит ветвь, которая будет выполняться в вашем вызываемом методе.Но в этом случае это аналогично издевательству над Collectors.toList().Нет ничего плохого в том, чтобы не насмехаться над этим здесь.

Кроме того, это не должно влиять на ваше покрытие в любом случае, если ваш пользовательский коллектор имеет свои собственные модульные тесты

...