0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Когда тестов и файлов с тестами становится много, возникают новые вопросы. Как группировать тесты? Как запустить на выполнение все тесты из одной директории? Если у нас есть много долгих тестов, можно ли запустить их параллельно?</p>
1
<p>Когда тестов и файлов с тестами становится много, возникают новые вопросы. Как группировать тесты? Как запустить на выполнение все тесты из одной директории? Если у нас есть много долгих тестов, можно ли запустить их параллельно?</p>
2
<p>Для решения этих вопросов используют специальные тестовые фреймворки. Они помогают организовать структуру тестов и дают много полезного - например, удобный вывод. С большинством из этих возможностей мы познакомимся далее по курсу. В PHP мире наиболее популярен фреймворк PHPUnit. К слову, с помощью него мы тестируем все практики на Хекслете.</p>
2
<p>Для решения этих вопросов используют специальные тестовые фреймворки. Они помогают организовать структуру тестов и дают много полезного - например, удобный вывод. С большинством из этих возможностей мы познакомимся далее по курсу. В PHP мире наиболее популярен фреймворк PHPUnit. К слову, с помощью него мы тестируем все практики на Хекслете.</p>
3
<p>Далее в уроке мы создадим с нуля PHP-проект и добавим в него тесты.</p>
3
<p>Далее в уроке мы создадим с нуля PHP-проект и добавим в него тесты.</p>
4
<h2>Почему мы изучаем тестирование именно сейчас</h2>
4
<h2>Почему мы изучаем тестирование именно сейчас</h2>
5
<p>PHPUnit, который мы будем использовать в этом курсе, активно использует механизм классов. Поскольку мы еще не изучали объектно-ориентированное программирование (ООП), это может показаться сложным. Однако не беспокойтесь: на данном этапе вам не нужно глубоко разбираться в том, как работают классы. Мы не будем углубляться в детали ООП в этом курсе.</p>
5
<p>PHPUnit, который мы будем использовать в этом курсе, активно использует механизм классов. Поскольку мы еще не изучали объектно-ориентированное программирование (ООП), это может показаться сложным. Однако не беспокойтесь: на данном этапе вам не нужно глубоко разбираться в том, как работают классы. Мы не будем углубляться в детали ООП в этом курсе.</p>
6
<p>Знание классов не влияет на основные принципы тестирования, которые мы будем изучать. Наша цель - научиться тестировать код, и это можно делать, даже если вы пока не знакомы с ООП. Тестирование важно знать раньше, чем ООП, потому что с ним мы уже сталкиваемся, выполняя практические задания. Изучив тесты, вы сможете читать и анализировать их код, что поможет вам эффективнее двигаться вперед.</p>
6
<p>Знание классов не влияет на основные принципы тестирования, которые мы будем изучать. Наша цель - научиться тестировать код, и это можно делать, даже если вы пока не знакомы с ООП. Тестирование важно знать раньше, чем ООП, потому что с ним мы уже сталкиваемся, выполняя практические задания. Изучив тесты, вы сможете читать и анализировать их код, что поможет вам эффективнее двигаться вперед.</p>
7
<p>ООП - это концепция, которую имеет смысл изучать только после определенной подготовки, и мы еще не дошли до этой точки. Но в PHP невозможно полностью обойтись без классов, даже в начале обучения. Поэтому просто запомните некоторые синтаксические конструкции, которые мы будем использовать. По ходу курса мы будем давать небольшие объяснения, чтобы вы могли следовать за материалом и писать тесты. Не переживайте, если сейчас что-то покажется непонятным - мы подробно разберем это в будущих курсах по ООП</p>
7
<p>ООП - это концепция, которую имеет смысл изучать только после определенной подготовки, и мы еще не дошли до этой точки. Но в PHP невозможно полностью обойтись без классов, даже в начале обучения. Поэтому просто запомните некоторые синтаксические конструкции, которые мы будем использовать. По ходу курса мы будем давать небольшие объяснения, чтобы вы могли следовать за материалом и писать тесты. Не переживайте, если сейчас что-то покажется непонятным - мы подробно разберем это в будущих курсах по ООП</p>
8
<h2>Настройка и запуск</h2>
8
<h2>Настройка и запуск</h2>
9
<p>Создание каркаса проекта с нуля в PHP - это довольно утомительное занятие. Поэтому для простоты воспользуемся заготовкой Хекслета. Склонируйте к себе на компьютер репозиторий<a>php-package</a>:</p>
9
<p>Создание каркаса проекта с нуля в PHP - это довольно утомительное занятие. Поэтому для простоты воспользуемся заготовкой Хекслета. Склонируйте к себе на компьютер репозиторий<a>php-package</a>:</p>
10
<p>Создайте репозиторий<em>hexlet-phpunit</em>у себя на GitHub. Соедините удаленный репозиторий с локальным, опираясь на инструкцию GitHub, которая станет доступна сразу после создания репозитория на его странице. Залейте проект на GitHub.</p>
10
<p>Создайте репозиторий<em>hexlet-phpunit</em>у себя на GitHub. Соедините удаленный репозиторий с локальным, опираясь на инструкцию GitHub, которая станет доступна сразу после создания репозитория на его странице. Залейте проект на GitHub.</p>
11
<p>Теперь добавим немного исходного кода. Создайте файл<em>src/Utils.php</em>с таким содержимым:</p>
11
<p>Теперь добавим немного исходного кода. Создайте файл<em>src/Utils.php</em>с таким содержимым:</p>
12
<p>Откройте файл<em>composer.json</em>и добавьте следующий код в секцию autoload:</p>
12
<p>Откройте файл<em>composer.json</em>и добавьте следующий код в секцию autoload:</p>
13
<p>После изменения секции autoload не забудьте запустить команду composer dump-autoload.</p>
13
<p>После изменения секции autoload не забудьте запустить команду composer dump-autoload.</p>
14
<p>Напишем наш первый тест. Создайте файл<em>tests/UtilsTest.php</em>со следующим содержимым:</p>
14
<p>Напишем наш первый тест. Создайте файл<em>tests/UtilsTest.php</em>со следующим содержимым:</p>
15
<p>Далее мы разберем структуру этого файла, а пока попробуем запустить тест на выполнение:</p>
15
<p>Далее мы разберем структуру этого файла, а пока попробуем запустить тест на выполнение:</p>
16
<p>Ура! Тесты прошли успешно.</p>
16
<p>Ура! Тесты прошли успешно.</p>
17
<h2>Структура</h2>
17
<h2>Структура</h2>
18
<p>Давайте еще раз посмотрим на файл с тестом:</p>
18
<p>Давайте еще раз посмотрим на файл с тестом:</p>
19
<p>Тест в PHPUnit - это класс с именем, которое заканчивается на Test и совпадает с именем файла. Класс пока можно воспринимать как способ объединения функции. Функции внутри классов называют<strong>методами</strong>. В отличие от функций, методы предваряются ключевым словом public, только в этом случае их можно вызвать снаружи класса. У тестовых методов имена должны начинаться с префикса test. Самих тестовых методов может быть сколько угодно. Тестовый фреймворк ищет функции с подобными именами и запускает их на выполнение. Если забыть добавить префикс, то метод не будет вызван. Внутри тестового метода пишется любой код, необходимый для тестирования.</p>
19
<p>Тест в PHPUnit - это класс с именем, которое заканчивается на Test и совпадает с именем файла. Класс пока можно воспринимать как способ объединения функции. Функции внутри классов называют<strong>методами</strong>. В отличие от функций, методы предваряются ключевым словом public, только в этом случае их можно вызвать снаружи класса. У тестовых методов имена должны начинаться с префикса test. Самих тестовых методов может быть сколько угодно. Тестовый фреймворк ищет функции с подобными именами и запускает их на выполнение. Если забыть добавить префикс, то метод не будет вызван. Внутри тестового метода пишется любой код, необходимый для тестирования.</p>
20
<p>Утверждения в PHPUnit - это не обычные функции, это методы, определенные в классе TestCase. Поэтому их вызов идет через синтаксис $this->. Пока просто запомните его и используйте для вызова утверждений. Подробнее $this разбирается в курсе по ООП.</p>
20
<p>Утверждения в PHPUnit - это не обычные функции, это методы, определенные в классе TestCase. Поэтому их вызов идет через синтаксис $this->. Пока просто запомните его и используйте для вызова утверждений. Подробнее $this разбирается в курсе по ООП.</p>