В последние недели я совершенствовал свои знания в области компьютерных наук, решая задачи по программированию. Поскольку эти проблемы имеют несколько решений, я обнаружил, что пишу дублированные модульные тесты. И рефакторинг этих тестов является громоздким (если поиск и замена не работают).
Чтобы прояснить ситуацию, я собираюсь выбрать проблему со многими возможными реализациями: сортировка массива целых чисел. Давайте упростим ситуацию и решим проблему с помощью сортировки по куче, сортировки вставкой, сортировки слиянием, быстрой сортировки и сортировки по выбору. Когда придет время писать тесты, все тесты будут дублироваться между реализациями. Если в будущем я придумаю новый тестовый пример, мне придется написать (скопировать и вставить) этот тест в тестовый класс каждой реализации. Это далеко не оптимально.
Немного покопавшись, я нашел удобное решение для устранения дублирования: JUnit 5 @ParameterizedTest и @valuesource. Мне пришлось провести небольшой рефакторинг: я создал новый интерфейс, который объявляет метод сортировки, и я убедился, что все классы *сортировки правильно реализуют интерфейс (вы создали один класс для каждой реализации, верно?). После этого оставалось только подключить тесты.
Круто! 🙂 Раньше модульные тесты проводились повсеместно, и не во всех реализациях были протестированы все угловые примеры. Достаточно скоро я обнаружил, что реализация быстрой сортировки выдает ошибку StackOverflowError, когда входной массив содержит повторяющиеся значения. Вы можете найти исходный код здесь .
Оригинал: “https://dev.to/treaz/unit-testing-algorithms-28pg”