@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()
и другие.