У меня иногда возникают проблемы, когда я думаю о модульном тестировании.Давайте посмотрим на этот сценарий:
@POST
@Path("/search")
public Response searchSelections(SearchRequestDto searchRequestDto,
@BeanParam ScrollableDto scrollableDto) {
Scrollable scrollable = Scrollable.getScrollable(scrollableDto);
Page<SelectionDto> selectionDtos =
selectionService.search(searchRequestDto, scrollable);
return Response.ok(selectionDtos).build();
}
Итак, в этом модульном тесте контроллера (не говоря об интеграции) я ожидаю, что с точки зрения бизнеса:
- Если searchRequestDto имеет значение null, нетфильтр применен, я ожидаю, что все сущности.
- Если scrollableDto имеет значение null, нумерация страниц не применяется, я ожидаю, что все сущности.
- Если ничего не найдено, является ли searchRequest, scrollable нулевым или нет, еслив базе данных ничего не найдено, я ожидаю, что объект страницы с пустым списком с HTTP.OK.
Так, как я могу здесь провести модульное тестирование?Все числа, которые я определил выше, находятся под ответственностью других классов.Таким образом, все, что я могу сделать, это высмеивать их без какой-либо проверки в моей функции searchSelections (), которую я тестирую здесь.Например;
Если scrollableDto имеет значение null (номер 2 выше):
- Первая строка моей функции выше -> Мне все равно, потому что это ответственность Scrollable.Функция getScrollable, которая уже протестирована модулем.
- Вторая строка моей функции выше -> Ответ прокручивается из приведенного выше.Так что этот прокручиваемый параметр является параметром selectionService.search, и мне это тоже не важно, потому что он уже протестирован модулем.Так что scrollableDto null или not null влияет на мою предыдущую строку, которая просто насмешливая, она не влияет на мое текущее состояние функций.
- Последняя строка моей функции выше -> Я должен вернуть selectionDtos из предыдущего макета.Теперь мой сценарий модульного тестирования номер 2, который scrollableDto = null, не имеет для меня никакого значения, так как он проверяется, его результат проверяется.
То же самое для других моих сценариев модульного тестирования.Как мне думать, когда мои параметры не изменяют состояние моей функции в тесте, это просто влияет на другое уже проверенное модулем состояние функций, которое я высмеиваю?
(я не хочу проверять вызовы методов, которыене имеет для меня какого-либо ценного вывода, также он всегда увеличивает стоимость нашего тестирования, которая всегда должна обновляться, если функция реорганизована, но ее вывод такой же. Хотя ничего не меняется, нам тоже нужно обновить наши тесты, что требует времени, если вызов функции /параметры проверены, за исключением некоторых случаев, таких как вызов базы данных и т. д.)