Как создать мок-объект в PHPSpec?

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

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

Как создать мок-объект в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от marisa , 8 месяцев назад

@lori_jast 

Для создания мок-объекта в PHPSpec вы можете использовать метод prophesize().


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
use AppExampleClass;

describe('ExampleClass', function () {
    it('should call a method on a mock object', function () {
        // Создаем мок-объект
        $mockObject = $this->prophesize(ExampleClass::class);
        
        // Устанавливаем ожидание вызова метода 'doSomething'
        $mockObject->doSomething()->shouldBeCalled();
        
        // Получаем сам мок-объект
        $mock = $mockObject->reveal();
        
        // Вызываем метод на мок-объекте
        $mock->doSomething();
    });
});


В этом примере мы создаем мок-объект класса ExampleClass, ожидая вызов метода doSomething. Затем мы получаем мок-объект с помощью метода reveal() и вызываем метод на нем.


Вы можете также устанавливать ожидания на возвращаемые значения методов, аргументы и другие действия с помощью методов-условий, таких как willReturn(), withArguments(), shouldNotBeCalled() и других. Это позволяет эмулировать поведение реального объекта и проверять, как он взаимодействует с другими частями кода.

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

от pauline , 7 месяцев назад

@lori_jast 

Для создания мок-объекта в PHPSpec можно использовать встроенную функциональность prophet. Prophet - это библиотека для создания мок-объектов в PHPSpec.

  1. Установите библиотеку prophet через Composer:
1
composer require --dev prophecy/phpunit-bridge


  1. Откройте файл спецификации и добавьте подключение к Prophet:
1
use ProphecyProphet;


  1. Создайте экземпляр Prophet в методе setUp() или в методе вашей спецификации:
1
2
3
4
5
6
private $prophet;

protected function setUp(): void
{
    $this->prophet = new Prophet();
}


или

1
2
3
4
5
6
private $prophet;

function let()
{
    $this->prophet = new Prophet();
}


  1. Создайте мок-объект с помощью Prophet:
1
2
3
4
5
$mock = $this->prophet->prophesize(SomeClass::class);
$mock->someMethod()->willReturn('some value');

// Получение реального объекта Mock:
$mockObject = $mock->reveal();


Вы можете настроить возвращаемые значения методов с помощью метода willReturn(). Если вам не нужно настраивать возвращаемое значение или поведение метода, вы можете просто использовать $this->prophet->prophesize(SomeClass::class)->reveal() для создания пустого мок-объекта.

  1. Не забудьте проверить непонятное поведение:
1
$this->prophet->checkPredictions();


  1. Завершите работу с Prophet в методе tearDown() или в методе активации:
1
2
3
4
protected function tearDown(): void
{
    $this->prophet->checkPredictions();
}


или

1
2
3
4
function letgo()
{
    $this->prophet->checkPredictions();
}


Теперь у вас должен быть создан мок-объект, который вы можете использовать в своих тестах PHPSpec.