Квест → Как хакнуть форму
Прошли: 77
Это первая часть серии "PHPUnit для начинающих". В этом руководстве мы объясним для чего покрывать код unit-тестами и всю мощь инструмента PHPUnit. В конце мы напишем простой тест с использованием PHPUnit.
Прежде чем мы погрузимся в PHPUnit давайте разберём различные типы тестов. В зависимости от того, как вы хотите категоризировать их, в PHPUnit применяются любые типы тестов для разработки ПО.
Давайте разделим тесты на категории по уровню их специфичности. По данным Википедии. В целом существует 4 признанных уровня тестов:
Если мы поместим типы тестов в пирамиду, выглядеть это будет так:
Глядя на пирамиду вверху, мы можем сказать, что юнит-тестирование — это строительный материал для всех остальных видов тестирования. Когда мы закладываем сильную базу, мы способны построить устойчивое приложение. Однако написание тестов вручную, а также запуск тестов каждый раз когда вы вносите изменения — это процесс трудоёмкий. Если бы существовал инструмент для автоматизации этого процесса, то написание тестов стало бы гораздо более приятным занятием.
Вот где выходит на сцену PHPUnit. В настоящее время PHPUnit наиболее популярный фреймворк для юнит-тестирования в PHP. Кроме наличия таких возможностей, как моки (подделки) объектов, он также может анализировать покрытие кода, логирование и предоставляет тысячи других возможностей.
Давайте установим PHPUnit в нашей системе:
$PATH
: после скачивания PHAR файла, убедитесь, что он является запускаемым (executable
) и путь, где он находится, прописан в системной переменной $PATH
. Т.о. вы сможете запускать его из любого места.Если вы работаете на Unix-подобной системе, то это вы можете сделать следующими командами:
$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
Если вы сделали всё верно, то вы сможете увидеть версию установленного PHPUnit, набрав в вашем терминале команду:
$ phpunit --version
Пришло время написать ваш первый unit-тест! Для начала нам нужен какой-нибудь класс, который мы будем тестировать. Давайте напишем простенький класс под названием Calculator
. И напишем для него тест.
Создайте файл "Calculator.php"
и скопируйте в него нижеприведённый код. Этот класс Calculator
имеет только один метод add
.
class Calculator { public function add($a, $b) { return $a + $b; } }
Теперь создайте файл для тестов "CalculatorTest.php"
и скопируйте в него следующий код. Мы остановимся на каждом методе более детально.
require 'Calculator.php'; class CalculatorTests extends PHPUnit_Framework_TestCase { private $calculator; protected function setUp() { $this->calculator = new Calculator(); } protected function tearDown() { $this->calculator = NULL; } public function testAdd() { $result = $this->calculator->add(1, 2); $this->assertEquals(3, $result); } }
Calculator.php
. Так как в этом файле мы собираемся тестировать именно этот класс, убедитесь, что он подключен.setUp()
это метод, который вызывается перед каждым тестом. Запомните он вызывается перед Каждым тестом, что означает, что если вы добавите ещё один метод теста в этот класс, то он будет вызываться и перед ним тоже.setUp()
, tearDown()
вызывается после каждого теста.testAdd()
— это метод-тест для метода add()
. PHPUnit будет распознавать каждый метод, начинающийся с test, как метод-тест и автоматически запускать его. В действительности этот метод очень прост: сначала мы вызываем метод Calculator::add()
чтобы вычислить значение 1 плюс 2, а затем мы проверяем, что этот метод вернул правильное значение, используя assertEquals()
из PHPUnit.Заключительной частью проделанной работы является запуск PHPUnit и проверка, что все тесты проходят (выполняются без ошибок). В вашем терминале зайдите в директорию где вы создали файл с тестами и запустите следующую команду:
$ phpunit CalculatorTest.php
Если вы всё сделали правильно, то вы должны увидеть что-то вроде этого:
PHPUnit 3.7.32 by Sebastian Bergmann. . Time: 31ms, Memory: 2.25Mb OK (1 test, 1 assertion)
Мы завершили первое руководство из серии "PHPUnit для начинающих". В следующей статье мы собираемся показать вам как использовать Data Provider
(поставщик данных) в ваших тестах.
Надеемся это простое руководство поможет вам в вашей разработке и поможет начать использовать unit-тестирование.
Если вам понравился перевод на эту тему читайте нас в Twitter, подписывайтесь на наши группы в Facebook, ВКонтакте, Google+. Мы будем рады продолжить серию.