Квест → Как хакнуть форму
Прошли: 77
Это третья часть серии "PHPUnit для начинающих". В этом руководстве мы объясним когда и как использовать тестовых "двойников" в тестах.
Как уже упоминалось в первой части данной серии статей, одной из мощнейших возможностей phpunit являются "двойники" для тестов. Очень часто в нашем коде функция одного класса вызывает функцию другого класса. В этом случае, мы имеем зависимость в этих двух классах. В частности, вызывающий класс имеет зависимость от вызываемого класса. Но как мы уже знаем из первой части, юнит-тест должен тестировать функциональную единицу, в этом случае, он должен проверить только в вызывающую функцию.
Чтобы решить эту проблему, мы можем использовать "двойника" для подмены вызываемого класса. Так как двойник может быть настроен возвращать предопределенные результаты, мы можем сосредоточиться на тестировании в вызывающей функции.
Тестовый "двойник" (англ. test doubles) — это общий термин для объектов, которые мы используем, чтобы заменить реальные объекты. На наш взгляд, это очень полезно для классификации тестовых "двойников" по их назначению. Это не только облегчит нам понимание описанного тестируемого случая, но и сделает наш код более дружелюбным и читаемым для других.
Опираясь на пост Мартина Фаулера, есть пять типов тестовых "двойников":
В PhpUnit метод getMockBuilder
может быть использован для создания любых подобных объектов, определяемых пользователем. В сочетании с настраиваемым интерфейсом, мы можем использовать его, чтобы создать, по сути, все пять типов тестовых "двойников".
Не имеет смысла использовать "двойника" для тестов нашего калькулятора, поскольку в настоящее время калькулятор класса не имеет зависимостей от других классов. Однако, чтобы продемонстрировать, как использовать "двойников" с помощью PhpUnit, мы создадим stub для класса Calculator
и протестируем его.
Давайте добавим тест под названием testWithStub
в наш существующий класс:
public function testWithStub() { // Create a stub for the Calculator class. $calculator = $this->getMockBuilder('Calculator') ->getMock(); // Configure the stub. $calculator->expects($this->any()) ->method('add') ->will($this->returnValue(6)); $this->assertEquals(6, $calculator->add(100,100)); }
getMockBuilder()
метод создает заглушку (stub), похожую на объект нашего класса Calculator
.getMock()
возвращает объект этой заглушки.expects()
говорит, что stub будет вызываться любое число раз.method()
определяет, какой метод будет вызван.will()
настраивает возвращаемое значение в stub.Мы завершили серию "PHPUnit для начинающих".
Вы должны были накопить достаточно знаний о PhpUnit, чтобы начать реализовывать unit-тесты в своём коде. Если вам требуется больше информации, можете обратиться к официальной документации и конкретно к разделу о "двойниках".
Надеюсь, это простое руководство помогло вам в понимании тестирования приложений.
Если вам понравился наш пост, читайте нас в Twitter, подписывайтесь на наши группы в Facebook, ВКонтакте, Google+. Мы будем рады продолжать для вас.