Думаю, стоит взглянуть на слушателей phpunit
Вот небольшой пример того, как вы внедряете слушателя в свой SF-проект
Сначала вы должны создать слушателя:
<?php
namespace Tests\PHPUnit;
use PHPUnit\Framework\AssertionFailedError;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestListener;
use PHPUnit\Framework\TestListenerDefaultImplementation;
use Symfony\Bundle\FrameworkBundle\Client;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class SimpleTestListener implements TestListener
{
use TestListenerDefaultImplementation;
public function addFailure(Test $test, AssertionFailedError $e, float $time): void
{
if ($test instanceof WebTestCase && method_exists($test, 'getClient')) {
/** @var Client $client */
$client = $test->getClient();
// Write the client response to a file
}
}
}
Затем добавьте слушатель в свой phpunit.xml:
<listeners>
...
<listener class="Tests\PHPUnit\SimpleTestListener"/>
</listeners>
Наконец, обновите свой тестовый файл:
<?php
namespace Tests\PHPUnit\YesWeHack;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class MyTest extends WebTestCase
{
static private $client;
static public function getClient()
{
return static::$client;
}
protected static function createClient(array $options = [], array $server = [])
{
static::$client = parent::createClient($options, $server);
return static::$client;
}
public function testReportIsFixed()
{
$client = static::createClient();
$client->request('GET', '/');
$this->assertEquals(500, $client->getResponse()->getStatusCode());
}
}
Обратите внимание, что класс MyTest
является просто примером и не должен использоваться таким образом, он только для целей примера.
По крайней мере, вы должны переместить статику и методы static в абстрактный класс, в который будут расширены ваши тесты.
Вот результат простого теста проекта, в который я помещаю код ответа и содержимое ответа в прослушиватель:
PHPUnit 7.5.8 by Sebastian Bergmann and contributors.
Testing Project Test Suite
int(200)
string(523) "<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<div class="form">
<form name="form" method="post">
<div><label for="form_username" class="required">Username</label><input type="text" id="form_username" name="form[username]" required="required" /></div>
<input type="hidden" id="form__token" name="form[_token]" value="2AsriLX8VMS0VqomR2wtTGk159TXMhYQJlPt_Chwtv8" />
</form>
</div>
</body>
</html>
"
F 1 / 1 (100%)
Time: 118 ms, Memory: 16.00 MB
There was 1 failure:
1) Tests\PHPUnit\YesWeHack\YWH_PGM5_1Test::testReportIsFixed
Failed asserting that 200 matches expected 500.
MyTest.php:29
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.