Как использовать параметризованные спеки в PHPSpec?

Пользователь

от adrien.waters , в категории: PHP , 8 месяцев назад

Как использовать параметризованные спеки в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от gussie.jones , 8 месяцев назад

@adrien.waters 

Чтобы использовать параметризованные спеки в PHPSpec, вы можете использовать аннотации @dataProvider и @example.


Аннотация @dataProvider позволяет указать метод, который будет предоставлять данные для параметризации спецификации. Этот метод должен возвращать массив массивов с наборами параметров.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class MySpec extends PhpSpecObjectBehavior
{
    /**
     * @dataProvider getTestData
     */
    function it_should_return_true_for_even_numbers($number, $expectedResult)
    {
        $this->isEven($number)->shouldReturn($expectedResult);
    }

    function getTestData()
    {
        return [
            [2, true],
            [3, false],
            [6, true],
            [7, false],
            [10, true],
        ];
    }
}


В этом примере метод getTestData() возвращает массив наборов параметров, состоящих из числа и ожидаемого результата. Каждый набор передается в метод it_should_return_true_for_even_numbers() в качестве аргументов.


Аннотация @example позволяет указать набор параметров непосредственно в описании специфического метода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class MySpec extends PhpSpecObjectBehavior
{
    function it_should_return_true_for_even_numbers()
    {
        $this->isEven(2)->shouldReturn(true);
        $this->isEven(3)->shouldReturn(false);
        $this->isEven(6)->shouldReturn(true);
        $this->isEven(7)->shouldReturn(false);
        $this->isEven(10)->shouldReturn(true);
    }
}


В этом примере каждый вызов метода isEven() выполняется с разными наборами параметров.


Оба этих подхода могут быть использованы для параметризации спеков в PHPSpec. Выбор между ними зависит от ваших предпочтений и стиля кодирования.