У меня есть два тестовых файла 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.