За последние 24 часа нас посетили 22644 программиста и 1278 роботов. Сейчас ищут 800 программистов ...

Юнит тесты

Тема в разделе "PHP для новичков", создана пользователем Alex5646, 23 фев 2016.

  1. Alex5646

    Alex5646 Новичок

    С нами с:
    29 дек 2015
    Сообщения:
    277
    Симпатии:
    4
    Адрес:
    От верлюда
    Вопрос от человека который не написал не одного юнит теста))) Для чего вообще писать эти тесты? Тестировать каждый метод, функцию или какие то отдельные?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    тесты писать нужно для того чтоб быть уверенным что твоя программа работает правильно и для определенного входного состояния выдает всегда одинаковый выходной. желательно в тесте покрывать как можно больше состояний, специально совершать ошибочные действия. ну и когда у тебя случился патч закрывающий какую-то ошибку - не забыть создать тест который будет подтверждать что ошибки действительно больше нет.

    второе зачем нужно писать тесты - предотвращение регрессии кода. вот есть у тебя софотина. большая. много зависимостей и все такое. и ты решил какой-то кусок кода к чертям переписать. но забыл уже что этот кусок использовался где-то еще лет пять назад. и всё сломалось нафиг. но ты об этом узнаешь после выпуска релиза на продакшне. юнит-тесты же проверят весь код, каждый его закоулок. если вдруг случилась регрессия - ты об этом узнаешь из проваленных тестов, а не из сломанного какому-то клиенту сайта.

    тестировать каждый метод/функцию, да, желательно. там будут исключения но ты с опытом сам поймешь.

    сколько тестов писать? зависит от сложности алгоритма. то есть нужно будет не забыть покрыть кодом каждый иф/свич внутри функции/метода. ну то есть не надо бояться что у тебя вдруг будет тысяча-другая тестов.

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

    в общем тесты писать нужно. и порой на них время нужно тратить больше чем на код, который они покрывают. и еще системами версирования кода обязательно пользоваться. а там дальше и непрерывная интеграция и непрерывный деплой и куча всяких страшных технологий. но пока неплохо начать с юнит-тестов.
     
  3. Alex5646

    Alex5646 Новичок

    С нами с:
    29 дек 2015
    Сообщения:
    277
    Симпатии:
    4
    Адрес:
    От верлюда
    Второе замечание прям про меня. Спасибо за совет, буду пробовать.
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    В больших проектах значительно увеличивает количества часов сна ночью без подъемов по звонку. Когда весь день команда разработки у вас катает измененения, причем каждый свои, вечером пробежав глазами старшие разработчики их деплоят в бой и идут домой. Утром или ночью оказывается что всю ночь лежало из-за 500-той половина проекта. Когда же весь основной функционал покрыт тестами и реализовано автоматическое тестирование вы будете уверены в том что у вас после выката доработок до сих пор живы критические модули проекта.