Unit-тесты
Зачем писать Unit-тесты
В категорию юнит-тестов попадают тесты, которые проверяют программный код. Цель данных тестов обеспечить стабильный рост программного обеспечения. При расширении и изменении программного кода тесты следят за отсутствием ошибок в старых блоках кода и сохранением работоспособности функционала программы.

Успешный набор тестов обладает следующими свойствами:

  • он интегрирован в цикл разработки
  • он проверяет только самые важные части вашего кода
  • он дает максимальную защиту от багов с минимальными затратами на сопровождение
Блоки кода покрытые тестами
Самые критические части системы, которым следует уделить большое внимание

  • часть кода, описывающая бизнес-логику, модель предметной области
  • инфраструктурный код
  • внешние сервисы и зависимости — базы данных и сторонние системы
  • код, связывающий все компоненты воедино
Стратегия тестирования
В тестировании существует система, которая описана ниже. Вы не должны тестировать задачу по принципу «составлю несколько случайных тестов и посмотрю на результат».

Необходимо чётко понимать, зачем вы делаете каждый очередной тест, понимать, какие тесты вы будете использовать дальше, и так далее.
Тестирование — это последовательный, систематический процесс

Тесты можно делить на группы:
1) Тесты с минимальным количеством элементов
2) Тесты из условий
3) Тесты пороговых значений
4) Тесты с крайними случаями
5) Тесты с некорректным вводом

На простых задачах можно не писать все тесты, но в данной статье разберем все варианты
Тесты с минимальным количеством элементов
При тестировании коллекций проведите тест на количество элементов N=1 и N=0. Vинимальный тест — это хорошая проверка остальной части программы, а также проверка того, действительно ли эти циклы не должны выполняться.
Тесты из условий
Обязательно составляйте тесты по условию задачи. Может оказаться, что вы просто неправильно поняли задачу или неправильно поняли формат входных и выходных данных и функция будет ошибочной. Условия выдвигают внешние факторы и соблюдение их обязательно.
Тесты пороговых значений
Бывает так, что в задаче есть случаи, где при небольшом изменении входные данных ответ — или логика его получения — меняются сильно. Напишите примеры тестов, при которых ответ может быть разный, когда несколько элементы проходят условия.
Тесты с крайними случаями
Часто бывает так, что функция выдает ошибку при передачи входных данных с параметрами, которые выражены крайними случаями. Например размерность коллекций, числовые коэффициенты: ноль, отрицательные, дробные.
Тесты с некорректным вводом
Если у вас есть в программе особые случаи, то подумайте и о них. Протестируйте все такие варианты. Проверьте защищена программа от некорректного ввода или передачи входящих ошибочных данных.