@jaylen.trantow
В PHPUnit можно использовать методы assertMethodHasNumberOfParameters()
и assertMethodHasParameter()
для проверки передачи аргументов при вызове метода.
Например, если у нас есть класс MyClass
с методом myMethod
, который принимает два аргумента, мы можем использовать следующий код в PHPUnit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class MyClassTest extends PHPUnitFrameworkTestCase { public function testMyMethod() { $reflectionClass = new ReflectionClass('MyClass'); $reflectionMethod = $reflectionClass->getMethod('myMethod'); // Проверяем, что метод myMethod имеет 2 аргумента $this->assertEquals(2, $reflectionMethod->getNumberOfParameters()); // Проверяем, что первый аргумент метода myMethod имеет тип string $parameter1 = $reflectionMethod->getParameters()[0]; $this->assertEquals('string', $parameter1->getType()->getName()); // Проверяем, что второй аргумент метода myMethod имеет тип int $parameter2 = $reflectionMethod->getParameters()[1]; $this->assertEquals('int', $parameter2->getType()->getName()); } } |
PHPSpec также предоставляет аналогичные возможности для проверки передачи аргументов, но использует специфический синтаксис.
Вот пример, демонстрирующий проверку передачи аргументов при вызове метода с помощью PHPSpec:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class MyClassSpec extends ObjectBehavior { function it_should_have_myMethod_with_2_arguments() { $reflectionMethod = new ReflectionMethod($this->getWrappedObject(), 'myMethod'); // Проверяем, что метод myMethod имеет 2 аргумента $reflectionMethod->getNumberOfParameters()->shouldBe(2); // Проверяем, что первый аргумент метода myMethod имеет тип string $parameter1 = $reflectionMethod->getParameters()[0]; $parameter1->getType()->getName()->shouldBe('string'); // Проверяем, что второй аргумент метода myMethod имеет тип int $parameter2 = $reflectionMethod->getParameters()[1]; $parameter2->getType()->getName()->shouldBe('int'); } } |
Обратите внимание, что в примерах выше мы используем рефлексию для получения информации о методе и его параметрах. Однако, использование рефлексии может быть необходимым только в определенных случаях, например, когда мы не можем обратиться к методу напрямую или если мы тестируем сторонний код. В большинстве случаев достаточно будет просто вызвать метод с нужными аргументами и проверить его результат или побочные эффекты.
@jaylen.trantow
В PHPSpec можно проверить передачу аргументов при вызове метода с помощью метода shouldHaveBeenCalledWithArgs
. Этот метод позволяет указать ожидаемые аргументы и проверить, был ли вызван метод с этими аргументами.
Пример использования:
1 2 3 |
$stub = $this->prophet->prophesize(MyClass::class); $stub->myMethod('arg1', 'arg2')->shouldHaveBeenCalledWithArgs(['arg1', 'arg2']); |
В этом примере мы создали заглушку ($stub
) для класса MyClass
с помощью метода prophesize
. Затем мы вызвали метод myMethod
с аргументами 'arg1'
и 'arg2'
. Затем мы использовали метод shouldHaveBeenCalledWithArgs
для проверки, что метод myMethod
был вызван с ожидаемыми аргументами.
Если метод был вызван с другими аргументами, PHPSpec выдаст ошибку. Если метод не был вызван совсем, также будет выдана ошибка.