Среда PHP BDD Behat позволяет вам тестировать ваши PHP-приложения, используя удобочитаемые предложения, чтобы написать функции и сценарии того, как ваши приложения должны вести себя, чтобы проверить их функциональность. Затем мы можем запустить эти тесты, чтобы увидеть, работает ли наше приложение так, как ожидается. Давайте потратим около 15 минут, быстро пройдя процесс установки Behat, и узнаем, как мы можем протестировать поведение наших PHP-приложений, используя основы.
Установка
Чтобы начать тестирование с Behat, нам просто нужно установить его на нашу локальную машину для разработки. Я буду использовать Composer, но вы можете взглянуть на документацию для дополнительных методов установки.
В вашем приложении PHP (у меня есть phpbehat
созданное пустое приложение PHP с именем phpbehat
) создайте файл composer.json
со следующим кодом для загрузки в Behat:
{ "Требовать": { "behat / behat": "2.4.*@stable" }, «минимальная стабильность»: «dev», "config": { "bin-dir": "bin /" } }
В вашем терминале мы можем установить его с помощью следующей команды:
1
|
composer update
|
Теперь мы должны запустить команду bin/behat
для работы с Behat.
Создание объектов
Мы всегда начинаем с создания новой функции . Функция — это то, что мы можем использовать для описания функции нашего приложения, а затем реализовать ее для прохождения теста.
Функция, в самом простом виде, состоит из:
- Удобочитаемый, простой текст.
- Использует расширение
.feature
. - Содержит преимущества, роль и саму функцию.
- Может содержать список сценариев.
Теперь я не могу показать вам, как протестировать все возможные функции приложения, так как это займет слишком много времени. Но я могу показать вам, как написать базовую функцию, и вы можете адаптировать этот код, чтобы он работал для вашего конкретного приложения.
Тестирование класса Phpadder
Чтобы не усложнять процесс обучения, давайте создадим очень простой файл Phpadder.php
который содержит несколько методов, которые мы можем использовать для сложения двух чисел и отображения их суммы.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
class Phpadder {
private $a;
private $b;
public $sum;
public function __construct($a, $b) {
$this->a = $a;
$this->b = $b;
}
public function add() {
$this->sum = $this->a + $this->b;
}
public function display() {
return $this->sum;
}
}
|
Это создает новый класс с именем Phpadder
. У нас есть несколько свойств для хранения первого ( $a
) и второго ( $b
) чисел, которые будут добавлены, а также свойство $sum
для хранения суммы значений.
Далее у нас есть конструктор, который инициализирует наши свойства. Затем у нас есть метод add
для сложения двух чисел и, наконец, метод display для отображения суммы двух чисел.
Функция Adder
Давайте теперь протестируем этот класс Phpadder
. Создайте новый файл .feature
вместе со следующим кодом:
1
2
3
4
5
|
# features/phpadder.feature
Feature: adder
In order to display the sum of two numbers
As anybody
I need to provide two numbers
|
Мы начинаем с того, что присваиваем нашей функции имя adder
. Затем мы указываем в трех строках преимущества, роль и, наконец, саму функцию. Это должно быть довольно понятно.
Теперь, когда у нас есть функция, давайте начнем писать наши сценарии.
Создание сценариев
Каждый раз, когда мы создаем функцию, мы можем определять сценарии, которые описывают, как эта функция ведет себя при определенных условиях. Сценарии следуют той же базовой схеме, состоящей из описания сценария, контекста, события и результата.
Давайте создадим сценарий для тестирования нашего приложения Phpadder
:
1
2
3
4
|
Scenario: Display the sum of two provided numbers
Given I have the number 50 and the number 25
When I add them together
Then I should get 75
|
Мы начинаем с нашего описания сценария, затем перечисляем, что мы начинаем с двух чисел 50 и 25, и когда они складываются вместе, должна отображаться сумма 75.
Вы также можете иметь несколько контекстов, событий и результатов, используя следующие ключевые слова: And
и But
. Вот модифицированный пример предыдущего сценария, где мы будем использовать And
:
1
2
3
4
5
|
Scenario: Display the sum of two provided numbers
Given I have the number 50 and the number 25
And I have a third number of 25
When I add them together
Then I should get 100
|
Создание определений шагов
Шаг — это не что иное, как функция PHP, которая состоит из ключевого слова, регулярного выражения и функции обратного вызова. Каждое утверждение в вашем сценарии будет соответствовать шагу. Эти шаги определяют, что должно произойти, если одно из ваших утверждений вызывается в сценарии. Вы сохраняете все свои шаги в файле features/bootstrap/FeatureContext.php
.
«Данный» шаг
В нашем файле FeatureContext.php
(вам может потребоваться создать его) нам нужно написать шаг для каждого из наших операторов, используя его имя в качестве имени функции. Начнем с выражения "Given I have the number"
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
# features/bootstrap/FeaturesContext.php
require(«Phpadder.php»);
use Behat\Behat\Context\BehatContext,
Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode,
Behat\Gherkin\Node\TableNode;
class FeatureContext extends BehatContext {
private $Adder;
/**
* @Given /^I have the number (\d+) and the number (\d+)$/
*/
public function iHaveTheNumberAndTheNumber($a, $b) {
$this->Adder = new Phpadder($a, $b);
}
|
Сначала мы создаем новый файл PHP, который требуется в нашем файле Phpadder.php
(файл, который мы тестируем), а затем мы сразу используем несколько классов Behat с операторами use
.
Затем мы создаем наш класс FeatureContext
и расширяем BehatContext
класс BehatContext
.
Наш класс имеет только одно свойство, $Adder
, которое будет содержать объект Phpadder
.
Наконец, мы создаем метод для нашего первого шага, используя то же имя, что и оператор. Наш шаг имеет регулярное выражение, найденное в комментарии метода. Это регулярное выражение используется для сопоставления шага с оператором сценария. В этом методе мы просто назначаем новый объект Phpadder
нашему свойству $this->Adder
чтобы остальные наши методы имели доступ к тому же объекту Phpadder
.
Теперь вы, вероятно, заметили ключевое слово @Given
в комментарии вашей функции, это на самом деле аннотация, так что можно идентифицировать различные типы шагов. Вы можете использовать @Given
, @When
и @Then
.
Теперь нам просто нужно написать последние два шага.
Шаг «Когда»
1
2
3
4
5
6
|
/**
* @When /^I add them together$/
*/
public function iAddThemTogether() {
$this->Adder->add();
}
|
Этот шаг просто использует метод add нашего объекта $this->Adder
для сложения двух чисел.
Шаг «Тогда»
1
2
3
4
5
6
7
8
9
|
/**
* @Then /^I should get (\d+)$/
*/
public function iShouldGet($sum) {
if ($this->Adder->sum != $sum) {
throw new Exception(«Actual sum: «.$this->Adder->sum);
}
$this->Adder->display();
}
|
Этот шаг начинается с проверки того, что фактическая сумма (полученная с помощью нашего объекта $this->Adder
и его свойства sum
) не равна ожидаемой сумме. Если это оценивается как истинное, это означает, что нам нужно, чтобы Behat показал ошибку. Для этого мы просто сгенерируем новое исключение, отображающее фактическую сумму, чтобы мы могли сравнить. В противном случае мы вызываем наш метод display
.
Время проводить тесты.
Выполнение тестов
Теперь, когда у нас есть все возможности, сценарии и шаги, давайте запустим наши тесты с помощью следующей команды:
1
|
bin/behat
|
Вы должны увидеть следующие сообщения об успехе внутри вашего терминала:
Вы можете убедиться, что ваши тесты работают правильно, просто сломав что-то в файле Phpadder.php
чтобы он не работал так, как ожидает ваш тест. Например, если мы изменим метод add
вместо использования вычитания, например так:
1
2
3
|
public function add() {
$this->sum = $this->a — $this->b;
}
|
И затем мы повторно bin/behat
наши тесты: bin/behat
. Вы можете видеть в нашем терминале, у нас теперь есть провальный тест, потому что он больше не добавляет наши числа, а вычитает их:
Вывод
В заключение вы можете выполнить небольшой четырехэтапный процесс тестирования приложений PHP с помощью Behat:
- Определить функцию
- Определить сценарий
- Определить определения шагов
- Запустите тесты, используя
bin/behat
Итак, имея такой небольшой объем кода, мы теперь должны иметь общее представление о том, как работать с Behat для тестирования наших PHP-приложений. Для получения дополнительной информации о работе с Behat, пожалуйста, ознакомьтесь с их документацией .