@jensen
PHPUnit предоставляет несколько способов создания тестовых двойников. Один из наиболее распространенных способов - использование "моков" (mock) и "фейков" (fake).
Моки - это объекты, которые создаются на основе интерфейсов или абстрактных классов и имитируют поведение реальных объектов. Моки используются для замены зависимостей и проверки, что определенные методы были вызваны.
Пример создания мока с помощью PHPUnit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
use PHPUnitFrameworkTestCase; class MyTest extends TestCase { public function testSomething() { // Создаем мок объекта SomeClass $mock = $this->getMockBuilder(SomeClass::class) ->getMock(); // Настраиваем мок, чтобы он возвращал определенное значение при вызове определенного метода $mock->method('someMethod') ->willReturn('someValue'); // Выполняем тестирование $result = $mock->someMethod(); // Проверяем, что метод был вызван $this->assertEquals('someValue', $result); } } |
Фейки - это объекты, которые реализуют интерфейсы или наследуются от абстрактных классов, но предоставляют упрощенную реализацию методов для использования в тестах. Фейки могут имитировать внешние зависимости, такие как база данных или сетевые соединения.
Пример создания фейка с помощью PHPUnit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
use PHPUnitFrameworkTestCase; class MyTest extends TestCase { public function testSomething() { // Создаем фейк объекта SomeClass $fake = $this->getMockBuilder(SomeClass::class) ->getMockForAbstractClass(); // Настраиваем фейк, чтобы он возвращал определенное значение при вызове определенного метода $fake->method('someMethod') ->willReturn('someValue'); // Выполняем тестирование $result = $fake->someMethod(); // Проверяем, что метод вернул ожидаемое значение $this->assertEquals('someValue', $result); } } |
Это простейшие примеры создания моков и фейков с помощью PHPUnit. В реальной разработке может понадобиться настраивать больше параметров и поведения объектов. Для более сложной конфигурации моков и фейков можно использовать методы PHPUnit, такие как willReturnCallback()
, with()
и другие.
@jensen
PHPUnit предоставляет множество возможностей для создания тестовых двойников: моков, фейков, стабов и шпионов. Вот несколько примеров использования этих возможностей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
use PHPUnitFrameworkTestCase; class MyTest extends TestCase { public function testSomething() { // Создание мока объекта SomeClass $mock = $this->createMock(SomeClass::class); // Установка ожиданий и возвращаемых значений $mock->method('someMethod') ->willReturn('someValue'); // Вызов метода $result = $mock->someMethod(); // Проверка ожидаемого результата $this->assertEquals('someValue', $result); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
use PHPUnitFrameworkTestCase; class MyTest extends TestCase { public function testSomething() { // Создание фейк объекта SomeClass $fake = $this->getMockBuilder(SomeClass::class) ->getMockForAbstractClass(); // Установка возвращаемого значения $fake->method('someMethod') ->willReturn('someValue'); // Вызов метода $result = $fake->someMethod(); // Проверка ожидаемого результата $this->assertEquals('someValue', $result); } } |
Это лишь примеры использования моков и фейков. Для создания стабов и шпионов в PHPUnit также есть соответствующие методы (createStub() и createSpy()). Подробнее о создании и настройке тестовых двойников в PHPUnit можно узнать из документации библиотеки: https://phpunit.de/documentation.html.
@jensen
Спасибо! Моя ошибка. Вот пример использования стаба и шпиона с помощью PHPUnit:
Стаб объект:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
use PHPUnitFrameworkTestCase; class MyTest extends TestCase { public function testSomething() { // Создание стаба объекта SomeClass $stub = $this->createStub(SomeClass::class); // Установка возвращаемого значения $stub->method('someMethod') ->willReturn('someValue'); // Вызов метода $result = $stub->someMethod(); // Проверка ожидаемого результата $this->assertEquals('someValue', $result); } } |
Шпион:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
use PHPUnitFrameworkTestCase; class MyTest extends TestCase { public function testSomething() { // Создание шпиона объекта SomeClass $spy = $this->getMockBuilder(SomeClass::class) ->enableProxyingToOriginalMethods() ->getMock(); // Установка ожиданий вызовов методов $spy->expects($this->once()) ->method('someMethod') ->willReturn('someValue'); // Вызов метода $result = $spy->someMethod(); // Проверка ожидаемого результата $this->assertEquals('someValue', $result); } } |
Таким образом, PHPUnit предоставляет различные методы для создания и настройки различных типов тестовых двойников: моков, фейков, стабов и шпионов. Каждый из этих типов тестовых двойников имеет свои особенности и применяется в различных ситуациях в зависимости от потребностей тестирования.