Что такое модульные тесты и почему я должен заботиться?

18
задан Peter Mortensen 3 June 2011 в 11:50
поделиться

8 ответов

Модульные тесты для любого кода, который Вы хотите поддержать.

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

, Конечно, это также требует, чтобы Вы справедливо дисциплинировались в том, как Вы пишете свой код, оба, потому что должно быть возможно изолировать отдельные функции или классы для тестирования их, и потому что, ну, в общем, тесты не пишут себя. Необходимо сделать это. ;)

, Учитывая качество большинства PHP кодируют, я видел, я сказал бы, что поблочное тестирование определенно имеет свое место в сообществе PHP. Больше, чем почти на любом другом языке, на самом деле. ;)

25
ответ дан 30 November 2019 в 06:17
поделиться

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

Модульные тесты обычно структурируются таким образом, что Вы настраиваете некоторое состояние, выполните функцию или метод, Вы хотите протестировать, и затем утверждать или вывод той функции или изменение в другом состоянии в результате той функции. Большинство платформ поблочного тестирования имеет утилиты для поддержки и структурирования этого, такие как:

  • Тесты : Способы собрать в группу подобные тесты, часто тот тест тот же файл или раздел кода.
  • функции Установки/разрушения : функции, которые вызваны перед каждым тестом, которые устанавливают и состояние очистки, которое является тем же через несколько тестов.
  • функции Утверждения : функции, которые позволяют Вам утверждать, что определенные вещи верны, таковы как значение, равны другому математическому ожиданию, что значение истинно/ложно, и т.д. Когда они перестали работать, они показывают Вам, каковы ожидаемые и фактические значения были.
  • А тестируют запущенное приложение : приложение, которое запускает все Ваши тесты для Вас один за другим, показывая Вам, успешно выполнился ли каждый или перестал работать, и если оно перестало работать, что определенные утверждения привели к сбою, и чем фактическое значение было в противоположность математическому ожиданию.

Модульные тесты полезны по ряду причин:

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

Модульные тесты полезны на любом коде, это больше, чем несколько строк, независимо от языка. У меня есть определенно единица, протестировал код php, даже для относительно маленьких проектов, и получили непосредственные вознаграждения от него.

19
ответ дан 30 November 2019 в 06:17
поделиться

Модульный тест является тестом небольшой части кода, который Вы пишете. Вы тестируете его в изоляции от остальной части системы, чтобы удостовериться, что та часть Вашего кода работает.

легче протестировать много небольших частей кода, гарантировать, чтобы они работали и затем протестировали их сотрудничество, вместо того, чтобы тестировать систему в целом.

важно различать поблочное тестирование и автоматизированное поблочное тестирование. Вы всегда должны тест единицы Ваш код. Однако автоматизация Ваших модульных тестов является целым другим предметом.

3
ответ дан 30 November 2019 в 06:17
поделиться

В дополнение к то, что имеет уже быть отвеченным, имея тестовые случаи, покрывающие Ваш код, позволяет Вам продолжать двигаться к Рефакторинг (улучшение Вашего кода разрабатывают, не изменяя его заметное поведение).

платформы Модульного теста для PHP включают PHPUnit и SimpleTest, которые были сравнены на StackOverflow.

3
ответ дан 30 November 2019 в 06:17
поделиться

Если Вы пишете приложение какого-либо описания, необходимо рассмотреть модульные тесты. Сделанный правильно, они вынуждают Вас думать о качестве кода, который Вы поставляете своим пользователям. Я думаю проблема, которую Вы имеете здесь, различие между кодом поблочного тестирования и автоматизированным поблочным тестированием. Поблочное тестирование может быть сделано так же просто как запись ряда тестов и затем вручную пробежки их.

Автоматизированное поблочное тестирование, с другой стороны, полагается на Вас имеющий некоторую форму приложения/ремня безопасности, чтобы выполнить и повторно выполнить тесты. С автоматизированными модульными тестами можно повторно выполнить тесты только путем нажатия кнопки. Итак, почему повторное выполнение является тестом, настолько важным? Просто разговор, Вы не пишете, что приложения запускают тесты на них однажды и затем убегают от них. Запишите свои тесты так, чтобы Вы осуществили свой код в дискретных небольших выполнениях и выполнили их в течение процесса разработки. Путем выполнения этого, с правильно написанным набором тестов, Вы получаете намного лучшую возможность идентификационного кода, это было повреждено обновлениями.

1
ответ дан 30 November 2019 в 06:17
поделиться

поиск Google "php поблочное тестирование" урожаи ценный клад информации об этом предмете. проект PHPUnit выглядит интересным.

0
ответ дан 30 November 2019 в 06:17
поделиться

Большинство php, которые я видел, почти невозможно сделать поблочное тестирование на.

Википедия имеет статью о поблочном тестировании, если Вам интересно.

1
ответ дан 30 November 2019 в 06:17
поделиться

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

Хотя множитель звучит немного грубовато, я думаю, что этот аргумент определенно оправдывает тестирование.

1
ответ дан 30 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: