Не удалось загрузить макет GuzzleHttp \ Client, класс уже существует - PullRequest
0 голосов
/ 06 августа 2020

У меня есть два тестовых файла phpunit:

FirstTest. php:

<?php

namespace legacy;

use TestCase;

class FirstTest extends TestCase
{
    public function testUpdate()
    {
        $client = new \GuzzleHttp\Client();

        $this->assertTrue(true);

    }
}

SecondTest. php:

<?php

namespace legacy;

use TestCase;
use Mockery;
use GuzzleHttp\Psr7\Response;

class SecondTest extends TestCase
{
    public function testPostCorrectResponse()
    {
        $guzzleMock = Mockery::mock('overload:GuzzleHttp\Client');
        $guzzleMock->shouldReceive('post')
            ->andReturn(
                new Response(200, [], json_encode(['id' => 'asdasd2131aa123']))
            )
            ->once();

        $this->assertTrue(true);
    }
}

Затем я запускаю phpunit :

$ vendor/bin/phpunit tests/legacy/ --process-isolation
PHPUnit 7.1.5 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 1.87 seconds, Memory: 6.00MB

OK (2 tests, 3 assertions)

Но без флага --process-isolation я получил ошибку:

$ vendor/bin/phpunit tests/legacy/
PHPUnit 7.1.5 by Sebastian Bergmann and contributors.

.E                                                                  2 / 2 (100%)

Time: 940 ms, Memory: 20.00MB

There was 1 error:

1) legacy\SecondTest::testPostCorrectResponse
Mockery\Exception\RuntimeException: Could not load mock GuzzleHttp\Client, class already exists

/home/vagrant/test/vendor/mockery/mockery/library/Mockery/Container.php:215
/home/vagrant/test/vendor/mockery/mockery/library/Mockery.php:79
/home/vagrant/test/tests/legacy/SecondTest.php:13

ERRORS!
Tests: 2, Assertions: 1, Errors: 1.

Все, что мне нужно, это запустить тесты phpunit без флага process-isolation и иметь возможность издеваться над GuzzleHttp клиент. Однако я довольно часто использую его в своем коде, и не всегда мне нужно имитировать. Возможно ли это?

Я считаю phpdo c

/**
 * @runInSeparateProcess
 * @preserveGlobalState disabled
 */

тем же, что и process-isolation flag.

...