Отказ от ответственности: Этот пост предназначен для того, чтобы развлечь и, возможно — только возможно, — заставить вас задуматься о вашем отношении к модульному тестированию программного обеспечения.
Разработчики, которые регулярно не пишут модульные тесты, не хотят начинать писать модульные тесты. Вероятно, из-за инерции, естественной склонности сопротивляться переменам. Это кажется слишком громоздким. Однако, как только те же самые разработчики начинают писать тесты, они, к своему удивлению, быстро обнаруживают, что на самом деле им это нравится. Кто бы мог подумать? В модульном тестировании есть своего рода качество геймификации. Видеть, что зеленая полоска пройденных тестов достигает 100% баллов, мало чем отличается от бесконечной охоты за добычей или очками опыта в играх grinder, которые привлекают так много людей. По какой-то причине нам нравится собирать эти очки. Разработчики втягиваются — они попадают на крючок.
Вскоре они обнаруживают, что тратят больше времени на написание тестов. Они хотят — нет, им нужно — покрытие кода на постоянном уровне 100%. Итак, они тратят целые дни на StackOverflow , чтобы выяснить, как обмануть свою среду тестирования, заставив поверить, что частный конструктор их служебного класса, который ни в коем случае, ни в какой форме, никогда не будет вызываться в производстве, на самом деле был охвачен тестами. Они тестируют весь свой код, даже множество тривиальных методов, разбросанных по их кодовой базе – им нужно протестировать все , каждая ветвь должна быть охвачена. На данный момент они просто откладывают написание множества тестов. Они считают, что гораздо проще писать тесты, чем начинать работу над следующей функцией, которая нужна их пользователям (для которой, кстати, требования в любом случае слишком расплывчаты). Просто покрыта еще одна строка кода…
Мы, разработчики, все находимся в этом путешествии к тестированию enlightenment, и вот как это происходит.
Модульное тестирование невежественный
Скорее всего, поначалу вы вообще не будете утруждать себя написанием тестов. Конечно, ты вроде как понимаешь их смысл, но это просто не для тебя. Это просто не стоит таких хлопот. Вам нужно позаботиться о производственном коде. Настоящий код, вот что важно, право ? Это то, что вы на самом деле оцениваете, право ? Итак, зачем тратить время на написание нерелевантных модульных тестов? Ваша команда тестирования и контроля качества обнаружит любые случайные ошибки позже, право ? На данный момент вы являетесь невеждой в модульном тестировании . Некоторые люди остаются такими всю свою карьеру. Ничто, присущее вам, не может подтолкнуть вас вперед. Если все вокруг невежественны в модульном тестировании, то это то, чем они останутся на неопределенный срок. Чтобы продвинуться вперед, требуется что-то или кто-то внешний. Должно быть что-то, что нарушит статус-кво.
Модульное тестирование нерешительно
В какой-то момент вы вынуждены начать писать модульные тесты. Это может быть менеджер, технический руководитель, коллега или, возможно, ваше собственное впечатление о постоянно снижающейся самооценке, которое заставляет вас начать. Вы начинаете писать тесты в основном ради написания тестов. Если вы столкнетесь с кодом, который вы за минуту или меньше не сможете разгадать как протестировать, вы спокойно игнорируете это. “В чем, черт возьми, разница между подделкой и шпионом , в любом случае?” , спрашиваете вы себя. Вы тестируете свои геттеры и сеттеры, и на этом все. Теперь вы имеете право на эпитет нерешительный в модульном тестировании .
Энтузиаст модульного тестирования
То, что происходит дальше, так же невообразимо и чудесно для вас, как и для всех вокруг вас. Внезапно, после написания пары сотен строк тестового кода, процесс — небеса небесные — действительно начинает быть приятным. Ты понимаешь, что все не так уж плохо. Вы испытываете теплое и неясное чувство, глубоко внутри вашей души программиста, когда видите, что зеленая полоса медленно ползет до 100% (или цвет вашего тестового костюма лучше описать как изумрудный ? Изумруд, конечно, звучит более драгоценно, не так ли? И это именно то, что представляет собой ваш набор тестов, верно? ). Все тесты пройдены. Конечно, время от времени вам может понадобиться, чтобы этот гуру из вашей команды описывал вам, как фиксировать параметры, передаваемые вашему макету. Но вы определенно на правильном пути. Ты говоришь себе это. Когда вы начинаете убеждать других писать тесты, вы теперь превратились в энтузиаста модульного тестирования , хорошо для вас!
Фанатик модульного тестирования
Прежде чем вы это осознаете, вы являетесь этим гуру. Вы знаете все, что нужно знать о подделках и подделках, TDD и BDD. Ваши друзья, не являющиеся программистами, думают, что вы заинтересовались маринованием овощей, как и все другие хипстеры, из-за вашего постоянного бреда о корнишонах. Код, который вы пишете, абсолютно, на сто процентов, поддается тестированию. Внедрение зависимостей — это ваша вторая натура, и это не подлежит обсуждению. Ваш код можно легко внедрить, заглушить, подделать, подсмотреть, высмеять или что там у вас есть. Ни одного неровного теста в поле зрения. Если вы не можете это проверить, то никто не сможет. Сами тесты стали для вас важнее, чем что-либо еще. Более важным для вас, чем ваш производственный код, и, следовательно, более важным, чем ваши пользователи и сам бизнес. Часы тратятся на онлайн-форумы, чтобы узнать, как обмануть вашу платформу тестирования, чтобы она дала вам полный охват. Вы приглашаете своих менеджеров на встречу, чтобы рассказать им об экономической эффективности модульных тестов и о том, что “крайне важно, чтобы мы никогда, никогда, ни по какой причине, ни за что не допускали фиксации ни одной строки кода без надлежащего покрытия тестами”. |/На данный момент вы фактически откладываете написание тестов. Кроме того, что еще хуже, вы превратились в фанатика тестирования .
Прагматик модульного тестирования
Некоторые люди достигают зенита модульного тестирования, самого последнего этапа нашего путешествия. Имейте в виду, очень немногие добираются сюда, потому что легко застрять где-нибудь по пути. Точно так же, как в AA , первый шаг к выздоровлению – это искренне признаться себе, что у вас есть проблема. Ваше чрезмерно амбициозное тестирование – это ваша проблема. В крайнем случае, коллеги устают от усердия тестового фанатика и организуют вмешательство — о, как неловко!. Только осознав проблему, вы можете достичь Дзен тестирования и стать прагматиком модульного тестирования . Тестирование прагматизма, тестирование просветления, достижение понимания модульного тестирования, нирвана, что у вас есть. На данный момент ваше путешествие по тестированию прошло полный круг, возвращаясь к тому, с чего вы начали; к пониманию того, что предоставление функций и производственного кода является вашей главной целью. Модульное тестирование – это всего лишь инструмент для более быстрого и с меньшим количеством ошибок вывода функций на рынок. Это для вас, чтобы чувствовать себя уверенным в том, что ваш код делает то, что вы поверьте, это должно сработать, это не для того, чтобы что—то доказывать кому-то еще – и уж точно не для того, чтобы превзойти какой-то, казалось бы, произвольный показатель или KPI. Ваши тесты предназначены для проверки на будущее и документирования ваших решений. Вы тестируете сложный, нетривиальный, критически важный для бизнеса код и оставляете в покое геттеры и сеттеры. Вы тестируете интеграции и интерфейсы со сторонним кодом, граничными случаями, кодом, который мог недавно измениться, или кодом, который, вероятно, изменится в будущем.
Ваши ублюдочные частные конструкторы больше не мешают вам спать по ночам. Вы ведете более сбалансированную, беззаботную и более довольную жизнь программиста – к радости ваших коллег и удовлетворению ваших клиентов и заказчиков.
Я тоже нахожусь в этом путешествии и нахожусь где-то между энтузиастом и фанатиком. Я работаю над улучшением. О боже, я работаю над улучшением. Во многих отношениях это похоже на поиск просветления монахами дзен-буддизма: чем усерднее человек старается, тем меньше вероятность того, что он его достигнет.
Как далеко вы продвинулись?
Оригинал: “https://dev.to/saidaspen/the-five-stages-to-unit-testing-enlightenment-3cli”