Вся суть тестирования

Вся суть тестирования

Дмитрий

Привет! В комментариях просили показать тесты не для легких примеров "2+2=4", а что-то посерьезнее и более живое.

Ну давайте сначала я покажу немного синтетики:

В этом методе мы проходим по массиву и сравниваем каждый элемент с его соседом. Если элемент больше своего соседа, то мы меняем их местами. Мы продолжаем проход по массиву до тех пор, пока все элементы не будут отсортированы в порядке возрастания.

Это называется пузырьковая сортировка. Вот пример кода:

Теперь давайте напишем тесты для этого метода, используя JUnit 5. Тесты должны проверять, что метод корректно сортирует массивы разных размеров и содержащие различные значения.

Эти тесты проверяют, что метод bubbleSort корректно сортирует массивы arr1, arr2, arr3 и arr4. Если бы мы не написали тесты, мы могли бы не заметить ошибок в методе bubbleSort.

Если простыми словами, то мы в тесте ожидаем правильное поведение метода сортировки. Мы знаем, как должно быть, и через assertArrayEquals сравниваем результат работы с ожидаемым значением.

Как это выглядит в настоящей работе:

Не буду погружать вас в очень сложную бизнес-логику. Обещаю.

Имеется вот такой утилитарный метод, который делает из листа объектов лист листов этих же объектов.

Это нам нужно для того, чтобы отправлять некоторые данные порционно. Например, мы достаем из базы 10к гостей, но отправлять можем только пачками по 1к.

Так бывает, например, такие условия от интегратора.

Но гостей может оказаться не 10к, а, к примеру, 2200. Тогда у нас будет список из 3 листов, 1к, 1к и 200. Параметр chunkSize отвечает за то, до какого размера мы создадим каждый лист.

Ну или например, кто больше знаком с разработкой - то в Kafka не рекомендуется делать слишком большие сообщения, но слишком маленькие также не являются хорошей практикой.

Поэтому было принято решение меньше обращаться к бд и держать данные в памяти до того момента, пока мы не отправим их в согласованном контракте.

Надеюсь, что пар из ушей еще не пошел ни у кого)

И чтобы проверить, действительно ли метод делит лист на кучку листов так, как нужно и так, как указано в параметрах, есть вот такой тест:

В нем мы в методе init() добавляем 3 элемента в лист.

И дальше в allowChunkify() вызываем настоящий метод chinkify() с параметром 1. Это значит, что нам нужно создать Список листов, чтобы в каждом из них находилось по 1 элементу. Всего будет список из 3 листов.

В assertEquals мы это и проверяем.

Далее для chunkedList2 мы делаем еще одну проверку, но уже с параметром 2.

Значит у нас должно получиться так:

Список из 2 листов, в первом листе будет 2 элемента, во втором листе - 1 элемент.

С помощью нескольких ассертов мы действительно проверяем, сходится ли результат работы метода с ожидаемыми значениями.


Да, этот тест не самый уж сложный, но он из реального рабочего проекта. Естественно, есть тесты и больше и сложнее по логике. Но принцип всегда один - "Нужно знать, что и в каком виде должно придти и сравнить это с результатом работы метода".

Думаю, что серию постов с тестированием на этом я закончу. Если остались вопросы, то пишите в комментарии!


Report Page