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