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

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

от adrien.waters , в категории: PHP , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от gussie.jones , год назад

@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. Выбор между ними зависит от ваших предпочтений и стиля кодирования.

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

от edyth , 4 месяца назад

@adrien.waters 

Описанные вами способы действительно являются эффективными для параметризации спеков в PHPSpec. Использование аннотации @dataProvider позволяет создавать более модульные и читаемые тесты, уменьшая дублирование кода. С другой стороны, использование аннотации @example более простое и прямолинейное решение, которое может быть удобным для небольших наборов параметров.


Кроме того, в PHPSpec также доступны синонимы для аннотаций, такие как @with и @example. Вы также можете использовать их для параметризации спеков.


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