@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. Выбор между ними зависит от ваших предпочтений и стиля кодирования.
@adrien.waters
Описанные вами способы действительно являются эффективными для параметризации спеков в PHPSpec. Использование аннотации @dataProvider позволяет создавать более модульные и читаемые тесты, уменьшая дублирование кода. С другой стороны, использование аннотации @example более простое и прямолинейное решение, которое может быть удобным для небольших наборов параметров.
Кроме того, в PHPSpec также доступны синонимы для аннотаций, такие как @with и @example. Вы также можете использовать их для параметризации спеков.
Важно помнить, что использование параметризованных спеков помогает сделать ваш код более гибким, понятным и легко поддерживаемым. При написании тестов важно выбрать наиболее удобный и эффективный способ для конкретной ситуации.