Хорошо, я разрабатываю веб-приложения на PHP и JavaScript и много раз здесь, в Stack Overflow. Я видел, как проходит тестовое тестирование слова, но нигде на веб-сайте я не смог найти удовлетворительный ответ на то, ,
Итак, что такое модульные тесты, и должен ли я, как программист PHP и JavaScript, заботиться, или они предназначены только для «реальных» языков программирования?
Модульные тесты предназначены для любого кода, который вы хотите сохранить.
Вкратце, идея состоит в том, чтобы написать много небольших тестов, каждый из которых можно запускать изолированно, и проверить минимально возможную часть вашей кодовой базы (часто отдельные классы или отдельные функции). Если я дам этой функции ожидаемый вход, вернет ли он результат, который я ожидаю? Если это так, это означает, что остальная часть приложения может в значительной степени предположить, что он работает. И если это не так, я предпочел бы уловить ошибку в небольшой, простой, изолированной тестовой функции, чем пытаться проследить ее во всей своей программе.
Конечно, это также требует, чтобы вы были достаточно дисциплинированы в том, как вы пишете свой код, так как это должно быть возможно изолировать отдельные функции или классы для их проверки, а также потому, что тесты не пишут сами. Вы должны это сделать. 😉
Учитывая качество большей части кода PHP, который я видел, я бы сказал, что модульное тестирование определенно имеет свое место в сообществе PHP. Тем более, что практически на любом другом языке. 😉
Единичные тесты – это автоматические тесты, которые проверяют, делает ли данный фрагмент кода то, что вы ожидаете от него, при определенных обстоятельствах. Хорошие модульные тесты проверяют небольшие функциональные возможности, часто на уровне отдельных функций.
Модульные тесты обычно структурированы так, что вы настраиваете какое-то состояние, запускаете функцию или метод, который хотите протестировать, а затем утверждаете либо выход этой функции, либо изменение в другом состоянии в результате этой функции. В большинстве инфраструктур модульного тестирования есть утилиты для поддержки и структурирования, такие как:
Единичные тесты полезны по нескольким причинам:
Модульные тесты полезны для любого кода, который больше нескольких строк, независимо от языка. Я определенно тестировал php-код, даже для относительно небольших проектов, и получил немедленную награду от него.
Единичный тест – это тест небольшой части кода, который вы пишете. Вы проверяете его отдельно от остальной части системы, чтобы убедиться, что эта часть вашего кода работает.
Легче протестировать множество небольших частей кода, обеспечить их работу, а затем проверить их совместную работу, а не тестировать систему в целом.
Важно различать модульное тестирование и автоматическое модульное тестирование. Вы всегда должны тестировать свой код. Тем не менее, автоматизация ваших модульных тестов – это совсем другой предмет.
В дополнение к тому, на что уже был дан ответ, при тестировании случаев, охватывающих ваш код, вы можете перейти к Рефакторинг (улучшая дизайн кода без изменения его наблюдаемого поведения).
Модульные тестовые рамки для PHP содержат PHPUnit и SimpleTest , которые были сопоставлены с StackOverflow .
Большинство php, которые я видел, почти невозможно выполнить модульное тестирование.
В Википедии есть статья об модульном тестировании, если вы заинтересованы.
Если вы пишете приложение любого описания, вы должны рассмотреть модульные тесты. Совершенно правильно, они заставляют вас думать о качестве кода, который вы доставляете своим пользователям. Я думаю, что проблема, которую вы здесь имеете, – это различие между модульным тестовым кодом и автоматическим модульным тестированием. Модульное тестирование может быть выполнено так же просто, как записать набор тестов, а затем вручную запустить их.
С другой стороны, автоматическое тестирование модулей основывается на том, что у вас есть какая-то форма приложения / упряжи для запуска и повторного тестирования. С помощью автоматических модульных тестов вы можете повторно запускать тесты, просто нажав кнопку. Так почему же повторять тест так важно? Проще говоря, вы не пишете приложения, которые запускают тесты на них один раз, а затем уходят от них. Напишите свои тесты, чтобы вы выполняли свой код в отдельных небольших тиражах и запускали их на протяжении всего процесса разработки. Делая это, с хорошо написанным набором тестов, у вас гораздо больше шансов идентифицировать код, который был нарушен обновлениями.
По поводу того, почему в первую очередь необходимо провести единичное тестирование, я хотел бы добавить аргумент Барри Бема: «обнаруженная и исправленная ошибка на этапе модульного тестирования более чем в сто раз дешевле, чем если бы это было сделано после поставки на клиент."
Хотя множитель звучит немного грубо, я думаю, что аргумент определенно оправдывает тестирование.
Поиск Google для «тестирования модуля php» дает сокровищницу информации по этому вопросу. Проект PHPUnit выглядит интересным.