@Erimax

Как поставить instance класса в мок тестах?

Всем привет. Есть код теста.

Как сделать чтобы возвращал 5 в моке? В ларавел делал вот так https://laravel.com/docs/9.x/mocking#mocking-objects Есть ли типа такое в symfony? Нужно мокат вес instance когда вызваеться этот класс с этом методом в других местах, как лучше мокат?

Пример тут https://stackoverflow.com/questions/61596662/symfo...
Нужно для апи теста

<?php

namespace App\Tests;

use App\Service\DaDataService;
use PHPUnit\Framework\TestCase;
use Mockery;

class DaDataTest extends TestCase
{
    public function testSomething(): void
    {
        $mock = Mockery::mock(DaDataService::class);

        $mock->shouldReceive('getDaData')
            ->zeroOrMoreTimes()
            ->andReturn(5);

        $daData = new DaDataService();
        $test = $daData->getDaData();
    }
}
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
@Erimax Автор вопроса
Решил так

6225ff31923f4867639853.png

<?php

namespace App\Tests;

use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;
use App\Service\DaDataService;
use Mockery;

class ApiTest extends ApiTestCase
{
    public function testDaDataRequest(): void
    {
        $client = static::createClient();
/*        $mock = $this->getMockBuilder(DaDataService::class)
            ->disableOriginalConstructor()
            ->getMock();

        $mock->expects($this->once())
            ->method('getDaData')
            ->willReturn(20);*/

        $mock = Mockery::mock(DaDataService::class);

        $mock->shouldReceive('getDaData')
            ->zeroOrMoreTimes()
            ->andReturn(7);

        $client->getContainer()->set(DaDataService::class, $mock);
        $response = $client->request('GET', '/test');

        $content = json_decode($response->getContent(), true);

        self::assertEquals(7, $content['returnTest']);
        self::assertResponseIsSuccessful();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы