Это ответ, почему вы должны проводить юнит-тестирование.
3 видео ниже посвящены модульному тестированию в javascript, но общие принципы применимы ко всем языкам.
Модульное тестирование: минуты теперь спасут часы спустя - Эрик Манн - https://www.youtube.com/watch?v=_UmmaPe8Bzc
JS Unit Testing (очень хорошо) - https://www.youtube.com/watch?v=-IYqgx8JxlU
Написание тестируемого JavaScript - https://www.youtube.com/watch?v=OzjogCFO4Zo
Сейчас я только изучаю предмет, поэтому, возможно, я не на 100% прав, и в этом есть нечто большее, чем то, что я здесь описываю, но мое базовое понимание модульного тестирования заключается в том, что вы пишете некоторый тестовый код (который сохраняется отдельно от вашего основного кода), который вызывает функцию в вашем основном коде с входными данными (аргументами), которые требуются для функции, и затем код проверяет, получает ли оно верное возвращаемое значение. Если оно вернуло действительное значение, среда модульного тестирования, которую вы используете для запуска тестов, показывает зеленый свет (все хорошо), если значение недопустимо, вы получаете красный свет и затем можете сразу же решить проблему выпустить новый код в производство, без тестирования вы, возможно, не заметили ошибку.
Таким образом, вы пишете тесты для своего текущего кода и создаете код, чтобы он прошел тест. Спустя месяцы вам или кому-то еще нужно изменить функцию в вашем основном коде, потому что раньше вы уже написали тестовый код для этой функции, теперь вы запускаете ее снова, и тест может не пройти, потому что кодер ввел в функцию логическую ошибку или полностью возвратил что-то отличается от того, что эта функция должна возвращать. Опять же, без проведения теста эту ошибку может быть трудно отследить, поскольку она может повлиять и на другой код и останется незамеченной.
Кроме того, тот факт, что у вас есть компьютерная программа, которая запускает ваш код и тестирует его вместо того, чтобы делать это вручную на странице браузера, экономит время (модульное тестирование на javascript). Допустим, вы модифицируете функцию, которая используется каким-либо сценарием на веб-странице, и она хорошо работает для своего нового предназначения. Но, скажем также, ради аргументов, что есть другая функция, которая у вас есть где-то еще в вашем коде, которая зависит от этой недавно модифицированной функции для правильной работы. Эта зависимая функция теперь может перестать работать из-за изменений, которые вы внесли в первую функцию, однако без наличия тестов, которые автоматически запускаются вашим компьютером, вы не заметите, что есть проблема с этой функцией, пока она не будет фактически выполнена и вам придется вручную перейти на веб-страницу, содержащую скрипт, который выполняет зависимую функцию, только тогда вы заметите, что есть ошибка из-за изменения, внесенного в первую функцию.
Повторим еще раз: тесты, запускаемые во время разработки вашего приложения, будут выявлять такие проблемы при кодировании. Не имея тестов на месте, вам пришлось бы вручную проходить через все ваше приложение, и даже тогда может быть трудно обнаружить ошибку, наивно вы отправляете ее в производство и через некоторое время добрый пользователь отправляет вам отчет об ошибке (который не будет так хорошо, как ваши сообщения об ошибках в тестовой среде).
Это довольно запутанно, когда вы впервые слышите об этом предмете и думаете про себя, я уже не тестирую свой код? И код, который вы написали, работает так, как и предполагалось, «зачем мне нужен другой фреймворк?» ... Да, вы уже тестируете свой код, но компьютер справляется с этим лучше. Вам просто нужно написать достаточно хороших тестов для функции / блока кода один раз, а остальное позаботится о вас могущественный процессор вместо того, чтобы вручную проверять, что весь ваш код все еще работает, когда вы вносите изменения в ваш код.
Кроме того, вам не нужно проводить модульное тестирование кода, если вы этого не хотите, но он окупается, когда база вашего проекта / кода начинает увеличиваться по мере того, как увеличивается вероятность появления ошибок.