Вопрос от человека который не написал не одного юнит теста))) Для чего вообще писать эти тесты? Тестировать каждый метод, функцию или какие то отдельные?
тесты писать нужно для того чтоб быть уверенным что твоя программа работает правильно и для определенного входного состояния выдает всегда одинаковый выходной. желательно в тесте покрывать как можно больше состояний, специально совершать ошибочные действия. ну и когда у тебя случился патч закрывающий какую-то ошибку - не забыть создать тест который будет подтверждать что ошибки действительно больше нет. второе зачем нужно писать тесты - предотвращение регрессии кода. вот есть у тебя софотина. большая. много зависимостей и все такое. и ты решил какой-то кусок кода к чертям переписать. но забыл уже что этот кусок использовался где-то еще лет пять назад. и всё сломалось нафиг. но ты об этом узнаешь после выпуска релиза на продакшне. юнит-тесты же проверят весь код, каждый его закоулок. если вдруг случилась регрессия - ты об этом узнаешь из проваленных тестов, а не из сломанного какому-то клиенту сайта. тестировать каждый метод/функцию, да, желательно. там будут исключения но ты с опытом сам поймешь. сколько тестов писать? зависит от сложности алгоритма. то есть нужно будет не забыть покрыть кодом каждый иф/свич внутри функции/метода. ну то есть не надо бояться что у тебя вдруг будет тысяча-другая тестов. и небольшое замечание из личного опыта. тесты должен писать другой разработчик. существует некоторое техническое задание которое описывает информационную систему или какой-то её компонент. один разработчик (или одна группа/отдел/фирма) пишет сам код по тз, а другой (-ая/-ие) - пишут тесты по этому же тз. и если в результате применения тестов на код всё прошло гладко - тогда успех. иначе - перепроверка валидности теста и вполне возможно отправка кода на доработку. в моем случае я несколько лет назад написал класс, а в прошлом году вдруг решил покрыть его тестами. оказалось класс всё время работал не так как нужно. вдруг. а потом покрыл тестами еще один старинный класс и... показалось что работает правильно. потому что сам тест был написан тем же рукожопым чмом что и тестируемый класс и содержал в себе такую же смысловую ошику. вот именно поэтому писать код и тесты должны разные жопы, руки, и головы. в общем тесты писать нужно. и порой на них время нужно тратить больше чем на код, который они покрывают. и еще системами версирования кода обязательно пользоваться. а там дальше и непрерывная интеграция и непрерывный деплой и куча всяких страшных технологий. но пока неплохо начать с юнит-тестов.
В больших проектах значительно увеличивает количества часов сна ночью без подъемов по звонку. Когда весь день команда разработки у вас катает измененения, причем каждый свои, вечером пробежав глазами старшие разработчики их деплоят в бой и идут домой. Утром или ночью оказывается что всю ночь лежало из-за 500-той половина проекта. Когда же весь основной функционал покрыт тестами и реализовано автоматическое тестирование вы будете уверены в том что у вас после выката доработок до сих пор живы критические модули проекта.