From b998309409b55616cb30b7e0b79c4b414cd06ab2 Mon Sep 17 00:00:00 2001 From: David Maicher Date: Mon, 27 Nov 2023 22:10:30 +0100 Subject: [PATCH] fix issue with skipping test during setUp using PHPUnit 10 (#263) --- .../PHPUnit/PHPUnitExtension.php | 44 +++++++++++++++++-- tests/Functional/PhpunitTest.php | 25 +++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/DAMA/DoctrineTestBundle/PHPUnit/PHPUnitExtension.php b/src/DAMA/DoctrineTestBundle/PHPUnit/PHPUnitExtension.php index e2f0bde..0f9393e 100644 --- a/src/DAMA/DoctrineTestBundle/PHPUnit/PHPUnitExtension.php +++ b/src/DAMA/DoctrineTestBundle/PHPUnit/PHPUnitExtension.php @@ -3,10 +3,18 @@ namespace DAMA\DoctrineTestBundle\PHPUnit; use DAMA\DoctrineTestBundle\Doctrine\DBAL\StaticDriver; -use PHPUnit\Event\Test\Finished as TestFinishedEvent; -use PHPUnit\Event\Test\FinishedSubscriber as TestFinishedSubscriber; +use PHPUnit\Event\Test\Errored; +use PHPUnit\Event\Test\ErroredSubscriber; +use PHPUnit\Event\Test\Failed; +use PHPUnit\Event\Test\FailedSubscriber; +use PHPUnit\Event\Test\MarkedIncomplete; +use PHPUnit\Event\Test\MarkedIncompleteSubscriber; +use PHPUnit\Event\Test\Passed; +use PHPUnit\Event\Test\PassedSubscriber; use PHPUnit\Event\Test\PreparationStarted as TestStartedEvent; use PHPUnit\Event\Test\PreparationStartedSubscriber as TestStartedSubscriber; +use PHPUnit\Event\Test\Skipped; +use PHPUnit\Event\Test\SkippedSubscriber; use PHPUnit\Event\TestRunner\Finished as TestRunnerFinishedEvent; use PHPUnit\Event\TestRunner\FinishedSubscriber as TestRunnerFinishedSubscriber; use PHPUnit\Event\TestRunner\Started as TestRunnerStartedEvent; @@ -42,8 +50,36 @@ public function notify(TestStartedEvent $event): void } }); - $facade->registerSubscriber(new class() implements TestFinishedSubscriber { - public function notify(TestFinishedEvent $event): void + $facade->registerSubscriber(new class() implements SkippedSubscriber { + public function notify(Skipped $event): void + { + StaticDriver::rollBack(); + } + }); + + $facade->registerSubscriber(new class() implements PassedSubscriber { + public function notify(Passed $event): void + { + StaticDriver::rollBack(); + } + }); + + $facade->registerSubscriber(new class() implements FailedSubscriber { + public function notify(Failed $event): void + { + StaticDriver::rollBack(); + } + }); + + $facade->registerSubscriber(new class() implements ErroredSubscriber { + public function notify(Errored $event): void + { + StaticDriver::rollBack(); + } + }); + + $facade->registerSubscriber(new class() implements MarkedIncompleteSubscriber { + public function notify(MarkedIncomplete $event): void { StaticDriver::rollBack(); } diff --git a/tests/Functional/PhpunitTest.php b/tests/Functional/PhpunitTest.php index 47be358..22bc84f 100644 --- a/tests/Functional/PhpunitTest.php +++ b/tests/Functional/PhpunitTest.php @@ -10,6 +10,16 @@ class PhpunitTest extends TestCase { use FunctionalTestTrait; + protected function setUp(): void + { + parent::setUp(); + $this->init(); + /** @phpstan-ignore-next-line */ + if ((method_exists($this, 'name') ? $this->name() : $this->getName()) === 'testSkippedTestDuringSetup') { + $this->markTestSkipped(); + } + } + public function testChangeDbState(): void { $this->assertRowCount(0); @@ -123,6 +133,21 @@ public function testPreviousChangesAreRolledBackAfterUsingSavePoint(): void $this->assertRowCount(0); } + public function testSkippedTest(): void + { + $this->markTestSkipped(); + } + + public function testSkippedTestDuringSetup(): void + { + $this->assertTrue(true); + } + + public function testMarkIncomplete(): void + { + $this->markTestIncomplete(); + } + public function testRollBackChangesWithReOpenedConnection(): void { $this->connection->close();