Что такое юнит-тестирование?

Я видел много вопросов о том, как проверить блок на другом языке, но вопросом о том, 'что', 'почему' и 'когда'. Что это? Что она делает для меня? Почему я должен использовать его? Когда я должен использовать его (и когда нет)? Какие есть распространенные ошибки и заблуждения

Я видел много вопросов о том, как проверить блок на другом языке, но вопросом о том, 'что', 'почему' и 'когда'. Что это? Что она делает для меня? Почему я должен использовать его? Когда я должен использовать его (и когда нет)? Какие есть распространенные ошибки и заблуждения

Модульное тестирование-это, грубо говоря, проверка битов кода в изоляции с тестовым кодом. Непосредственные преимущества, которые приходят на ум: Выполнения тестов будет автоматизировать и повторяемые Вы можете проверить на гораздо более низком уровне, чем точка-и-нажмите кнопку тестирования через графический интерфейс Обратите внимание, что если ваш тестовый код пишет в файл, открывает подключение к базе данных или делает что-то по сети, это более правильно классифицируется как интеграционный тест. Интеграционные тесты-это хорошо, но не следует путать с модульными тестами. Модульного тестирования код должен быть коротким, сладкий и быстрый для выполнения. Другой способ взглянуть на модульное тестирование заключается в том, что ты сначала пишешь тесты. Это называется Разработка через тестирование (TDD для краткости). ТДД приносит дополнительные преимущества: Вы не пишите спекулятивным ", мне понадобится это в будущем" код ... просто достаточно, чтобы сделать тесты Код ты написал-это всегда покрыт тестами Написав первый тест, вы вынуждены думать о том, как вы хотите назвать код, который, как правило, улучшают дизайн кода в долгосрочной перспективе. Если вы не делаете теперь модульного тестирования, я рекомендую вам начать работу на нем. Получить хорошую книгу, практически ни в xUnit-книга не потому, что понятия очень сильно передаваться между ними. Иногда написание модульных тестов может быть болезненным. Когда он получает таким образом, попытаться найти кого-нибудь помочь вам, и не поддавайтесь искушению "просто написать чертов код". Модульное тестирование-это много, как мыть посуду. Это не всегда приятно, но он держит свой метафорический кухню в чистоте, и вы действительно хотите, чтобы он был чистым. :) Редактировать: одно заблуждение приходит на ум, хотя я не уверен, что это так распространено. Я слышал, что менеджер проекта сказал, что юнит-тесты сделанные команда дважды писать весь код. Если она выглядит и чувствует себя на этот путь, вы делаете это неправильно. Не только писать тесты, как правило, ускоряет развитие, но это также дает Вам удобный "теперь я закончил" показатель того, что вы бы в противном случае.

Я не согласен с Дэном (хотя лучшим выбором может быть просто не отвечать)...но... Модульное тестирование-это процесс написания кода для проверки поведения и работоспособности вашей системы. Очевидно, тесты, улучшать качество вашего кода, но это лишь поверхностные преимущества модульного тестирования. Реальные преимущества заключаются в следующем: Сделать его легче изменить техническую реализацию, а убедившись, что вы не измените своего поведения (рефакторинг). Правильно модульного тестирования код может быть агрессивно реструктурировали/убралась с мало шансов наломать дров, не замечая этого. Дает разработчикам уверенность при добавлении поведения или внесения исправлений. Документировать код Указать области кода, которые тесно взаимосвязаны. Трудно модульного тестирования код, который тесно связан Предоставлять средства использовать свой API и искать трудности на ранних этапах Указывает на методы и классы, которые не очень дружная Вы должны проверить тем, что ее в ваших интересах, чтобы доставить ремонтопригодны и качественный продукт для вашего клиента. Я предлагаю вам использовать его для любой системы, или части системы, которая моделирует поведение реального мира. Другими словами, это особенно хорошо подходит для развития предприятия. Я бы не использовать его для выбрасывать/служебные программы. Я бы не использовать его для частей системы, которые являются проблемными для тестирования (UI это общий пример, но это не всегда так) Величайшая ошибка в том, что разработчики тестируют слишком большой блок, или они считают метод единицы. Это особенно верно, если вы не понимаете инверсия управления - в этом случае модульные тесты всегда превратится в сквозную интеграционного тестирования. Модульный тест должен тест индивидуального поведения - и большинство методов имеют множество характеристик. Величайшим заблуждением является то, что программисты не должны проверить. Только плохие или ленивые программисты считают, что. Если парень строит ваша крыша не проверить? Если врач замене сердечного клапана не проверить новый клапан? Только программист может проверить, что его код делает то, что он намеревался это сделать (QA можно проверить крайние случаи - как код ведет себя, когда он сказал, чтобы сделать вещи программист не намерен, и клиент может делать приемочных испытаний - ли код сделать то, что клиент заплатил за него делать)

Основное отличие модульного тестирования, в отличие от "просто открыть новый проект и проверить этот конкретный код" заключается в том, что они автоматизированы, тем самым повторяемым. Если вы тестируете свой код вручную, он может убедить вас, что код вполне рабочий - в своем нынешнем состоянии. Но то, что примерно через неделю, когда вы сделали небольшим изменением в нем? Вы готовы снова проверить его вручную всякий раз, когда что-то меняется в коде? Скорее всего нет :-( Но если вы можете выполнять тесты в любое время с одним щелчком мыши, точно так же, в течение нескольких секунд, тогда они будут показывать Вам немедленно всякий раз, когда что-то сломалось. И если вы также интегрировать модульные тесты в автоматизированный процесс сборки, они будут предупреждать вас ошибки даже в тех случаях, когда, казалось бы, совершенно несвязанные изменить что-то сломалось в дальней части кода - когда он даже не приходило в голову, что необходимо перепроверять, что определенная функциональность. Это главное преимущество модульных тестов за испытания силы. Но ждите, есть больше: модульные тесты укоротить развития обратной связи резко: отдельный отдел тестирования может занять несколько недель для вас, чтобы знать, что есть ошибка в коде, к этому времени вы уже забыли многое из контекста, таким образом, это может занять несколько часов, чтобы найти и исправить ошибку; ОТО с модульные тесты, отзывы цикла измеряется в секундах, и исправления ошибок процесс, как правило, вдоль линий, "О ш*т, я забыл проверить, что условие здесь" :-) модульные тесты эффективно документа (в вашем понимании) поведение вашего кода модульного тестирования вам придется пересмотреть свой выбор дизайна, который приводит в простой и понятный дизайн Основы модульного тестирования, в свою очередь, делает его легким для вас, чтобы написать и выполнить тесты.

Меня никогда не учили модульного тестирования в университете, и мне потребовалось некоторое время, чтобы "получить" его. Я читал об этом, пошли "ах, право, автоматизированное тестирование, что может быть прохладно, я думаю", а потом я забыл об этом. Прошло совсем немного дольше, прежде чем я действительно понял, в момент: допустим, вы работаете на большую систему и написать небольшой модуль. Он компилирует, вы поставить его через его шагов, он отлично работает, вы переходите к следующей задаче. Спустя девять месяцев и две версии кто-то вносит изменения в некоторые, казалось бы, несвязанные части программы, и это разбивает модуль. Хуже, они тестируют свои изменения, и их код работает, но они не проверить ваш модуль; черт возьми, они могут даже не знать существует модуль. И теперь у вас проблема: сломанный код в багажнике и никто даже не знает. В лучшем случае-это внутренняя тестер находит его, прежде чем корабль, но фиксации кода, который в конце игры стоит дорого. И если нет внутренних тестер находит его...Ну, это может вам очень дорого. Решение модульных тестов. Они поймают проблем при написании кода - это хорошо, но ты мог бы сделать это вручную. Настоящая награда заключается в том, что они поймают проблем девять месяцев вниз по линии, когда вы работаете над совершенно другим проектом, но летний стажер думает, что это будет выглядеть опрятнее, если эти параметры были в алфавитном порядке - и тогда модульного теста вы писали обратном пути терпит неудачу, и кто-то бросает вещи в интерн, пока он меняет параметра порядка. Это "почему" модульные тесты. :-)

Вносят свой вклад в философские плюсы модульного тестирования и здесь ТДД-некоторые из них ключей "лампочка" замечания, которые поразили меня на мои робкие первые шаги на пути к просветлению ТДД (отсутствует оригинал или обязательно новости)... ТДД не значит писать в два раза больше кода. Тестовый код, как правило, довольно быстро и безболезненно писать и является ключевой частью процесса проектирования и критически. ТДД поможет вам понять, когда нужно прекратить кодировку! Тесты даст вам уверенность, что вы сделали достаточно и можете останавливаемся и двигаться дальше к следующей вещи. Тесты и код работать вместе для достижения лучшего код. Ваш код может быть плохо / багги. Ваш испытание может быть плохо / багги. В ПИЯФ Вы ставки на шансы быть плохим / багги довольно низкая. Часто его тест, Что нужно исправить, но это все равно хороший результат. ТДД помогает с кодированием запор. Вы знаете, что ощущение, что у вас есть так много, чтобы вы едва знаете с чего начать? Это в пятницу днем, если вы просто мусолить еще пару часов... TDD позволяет конкретизировать очень быстро, что вы думаете, что вам нужно сделать, и получает ваше кодирование движется быстро. Также, как лабораторные крысы, я думаю, что мы все реагировали на это большой зеленый свет и работать усерднее, чтобы снова увидеть его! Аналогичным образом, эти типы дизайнера можно увидеть, что они работают над. Они могут блуждать за сок / сигареты / мобильный перерыв и вернуться к монитору, что сразу придает им визуальную подсказку как, туда, где они должны. ТДД дает нам что-то подобное. Это легче увидеть, где мы начали, когда жизнь вмешивается... Я думаю, что это было Фаулера, который сказал: "несовершенных тестов, часто, гораздо лучше, чем идеальный тестов, которые никогда не написать". Я интерпретировать это как давая мне разрешение писать тесты, где я думаю, они будут наиболее полезны, даже если остальной мой код покрытия является крайне неполной. ТДД помогает во всех видах удивительным образом вниз по линии. Хороших модульных тестов может помочь что-то делать, они смогут помочь вам перенести код из одного проекта в другой и дать вам неоправданное чувство превосходства над не-тестирование коллег :) Данная презентация является отличным введение для всех вкусное тестирование добра влечет за собой.

Я хотел бы рекомендовать в xUnit тестирования забронировать моделей Джерард Месарош. Это большой, но это большой ресурс на модульное тестирование. Вот ссылка на его сайт, где он обсуждает основы модульного тестирования. <http://xunitpatterns.com/XUnitBasics.html>

Я использую юнит-тесты, чтобы сэкономить время. При построении бизнес-логики (или доступа к данным) функции тестирование может часто вводить в много экранов, что может или не может быть закончена. Автоматизация этих тестов экономит время. Для меня юнит-тесты являются разновидностью модульного теста. Обычно существует как минимум один тест в общественную функцию. Я пишу дополнительные тесты, чтобы покрыть различные отклонения в поведении. Все особые случаи, которые вы думали при разработке кода могут быть записаны в код в модульных тестах. Модульные тесты также становятся источником примеров о том, как использовать код. Это намного быстрее для меня, чтобы обнаружить, что мой новый код ломает что-то в моей модульные тесты, а затем проверить в коде и у некоторых фронт-энд разработчика найти проблема. Для тестирования доступа к данным, я стараюсь писать тесты, либо имеют никаких изменений или убирать за собой. Модульные тесты не собираетесь быть в состоянии решить все необходимые испытания. Они смогут сэкономить время разработки и тестирования основных частей приложения.

Это мой взгляд на это. Я бы сказал, что модульное тестирование-это практика написания программного обеспечения тесты, чтобы убедиться, что ваша реальная программа делает то, что он предназначен для. Это началось с JUnit в мире Java и стала лучшей практики в PHP, а также с SimpleTest и в PHPUnit. Это основной практики экстремального программирования и помогает вам быть уверенным, что ваша программа по-прежнему работает после редактирования. Если у вас есть достаточный охват теста можно делать капитальный рефакторинг, исправление ошибок и быстро добавлять новые функции с гораздо меньшим страхом введения других проблем. Это наиболее эффективным, когда все модульные тесты могут выполняться автоматически. Модульное тестирование, как правило, связаны с развитием ОО. Основная идея заключается в том, чтобы создать скрипт, который настраивает окружение для кода, а затем осуществляет его; вы пишете заявления, указать предполагаемый вывод, который вы должны получить, а затем выполнить скрипт текста с помощью рамок, упомянутых выше. Рамках будет запускать все тесты на свой код, а затем доложить об успехе или неуспехе каждого теста. в PHPUnit запускается из командной строки в Linux по умолчанию, хотя есть HTTP-интерфейсы, доступные для него. SimpleTest-это веб-основе по своей природе и гораздо легче вставать и бежать, ИМО. В сочетании с дебаггером xdebug, PHPUnit может дать вам автоматизированные статистику покрытия кода, который некоторые люди находят очень полезным. Некоторые команды писать крючки из их SVN-репозиторий, так что модульные тесты выполняются автоматически каждый раз при внесении изменений. Это хорошая практика, чтобы сохранить ваши модульные тесты в том же хранилище, как приложения.

Библиотек, как Нанит, в xUnit или JUnit является просто обязательным, если вы хотите, чтобы развивать свои проекты, используя подход TDD популяризировал Кент Бек: Вы можете прочитать введение к отработке приводом (ТДД) или развития книга тест Кента Бека агрегат: пример. Затем, если вы хотите быть уверены, что ваши тесты покрывают "хорошей" части вашего кода, Вы можете использовать программное обеспечение как NCover, JCover, PartCover или любой другой. Они скажут вам, что процент охвата кода. В зависимости от того, насколько вы искусны в ТДД, вы будете знать, если вы практиковали достаточно хорошо :)