Как создать тестовый двойник (test double) с помощью PHPUnit?

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

от jensen , в категории: PHP , 10 месяцев назад

Как создать тестовый двойник (test double) с помощью PHPUnit?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от terrence , 9 месяцев назад

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