diff --git a/.psalm/baseline.xml b/.psalm/baseline.xml
index 120aae67f66..545e314592c 100644
--- a/.psalm/baseline.xml
+++ b/.psalm/baseline.xml
@@ -739,6 +739,12 @@
$this instanceof PhptTestCase
+
+
+ getName
+ getName
+
+
CodeCoverage::instance()
diff --git a/src/Event/DispatchingEmitter.php b/src/Event/DispatchingEmitter.php
index 27a29b2031d..2a4d14917b0 100644
--- a/src/Event/DispatchingEmitter.php
+++ b/src/Event/DispatchingEmitter.php
@@ -153,9 +153,13 @@ public function testPassedWithWarning(Code\Test $test, string $message): void
));
}
- public function testPassedButRisky(): void
+ public function testPassedButRisky(Code\Test $test, string $message): void
{
- $this->dispatcher->dispatch(new Test\PassedButRisky($this->telemetryInfo()));
+ $this->dispatcher->dispatch(new Test\PassedButRisky(
+ $this->telemetryInfo(),
+ $test,
+ $message
+ ));
}
public function testSkippedByDataProvider(Code\ClassMethod $testMethod, string $message): void
diff --git a/src/Event/Emitter.php b/src/Event/Emitter.php
index b5a5fb75e40..599891ef65c 100644
--- a/src/Event/Emitter.php
+++ b/src/Event/Emitter.php
@@ -51,7 +51,7 @@ public function testPassed(Code\Test $test): void;
public function testPassedWithWarning(Code\Test $test, string $message): void;
- public function testPassedButRisky(): void;
+ public function testPassedButRisky(Code\Test $test, string $message): void;
public function testSkippedByDataProvider(Code\ClassMethod $testMethod, string $message): void;
diff --git a/src/Event/Test/PassedButRisky.php b/src/Event/Test/PassedButRisky.php
index f9c67eaa517..50446ab91ee 100644
--- a/src/Event/Test/PassedButRisky.php
+++ b/src/Event/Test/PassedButRisky.php
@@ -9,6 +9,7 @@
*/
namespace PHPUnit\Event\Test;
+use PHPUnit\Event\Code;
use PHPUnit\Event\Event;
use PHPUnit\Event\Telemetry;
@@ -16,13 +17,29 @@ final class PassedButRisky implements Event
{
private Telemetry\Info $telemetryInfo;
- public function __construct(Telemetry\Info $telemetryInfo)
+ private Code\Test $test;
+
+ private string $message;
+
+ public function __construct(Telemetry\Info $telemetryInfo, Code\Test $test, string $message)
{
$this->telemetryInfo = $telemetryInfo;
+ $this->test = $test;
+ $this->message = $message;
}
public function telemetryInfo(): Telemetry\Info
{
return $this->telemetryInfo;
}
+
+ public function test(): Code\Test
+ {
+ return $this->test;
+ }
+
+ public function message(): string
+ {
+ return $this->message;
+ }
}
diff --git a/src/Framework/TestResult.php b/src/Framework/TestResult.php
index bfc7902f5e5..1ab87b68fed 100644
--- a/src/Framework/TestResult.php
+++ b/src/Framework/TestResult.php
@@ -13,6 +13,7 @@
use function get_class;
use Countable;
use Error;
+use PHPUnit\Event;
use PHPUnit\Util\Printer;
use Throwable;
@@ -189,6 +190,15 @@ public function addFailure(Test $test, AssertionFailedError $e, float $time): vo
if ($test instanceof TestCase) {
$test->markAsRisky();
+
+ Event\Facade::emitter()->testPassedButRisky(
+ new Event\Code\Test(
+ get_class($test),
+ $test->getName(false),
+ $test->getName(true),
+ ),
+ $e->getMessage()
+ );
}
if ($this->stopOnRisky || $this->stopOnDefect) {
diff --git a/tests/_files/NullEmitter.php b/tests/_files/NullEmitter.php
index 7f02379adc7..84f147a7d0f 100644
--- a/tests/_files/NullEmitter.php
+++ b/tests/_files/NullEmitter.php
@@ -73,7 +73,7 @@ public function testPassedWithWarning(Code\Test $test, string $message): void
{
}
- public function testPassedButRisky(): void
+ public function testPassedButRisky(Code\Test $test, string $message): void
{
}
diff --git a/tests/unit/Event/DispatchingEmitterTest.php b/tests/unit/Event/DispatchingEmitterTest.php
index 7a460495c92..8951126e977 100644
--- a/tests/unit/Event/DispatchingEmitterTest.php
+++ b/tests/unit/Event/DispatchingEmitterTest.php
@@ -549,6 +549,13 @@ public function notify(Test\PassedWithWarning $event): void
public function testTestPassedButRiskyDispatchesTestPassedButRiskyEvent(): void
{
+ $test = new Code\Test(
+ self::class,
+ 'foo',
+ 'foo with data set #123'
+ );
+ $message = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
+
$subscriber = new class extends RecordingSubscriber implements Test\PassedButRiskySubscriber {
public function notify(Test\PassedButRisky $event): void
{
@@ -569,10 +576,18 @@ public function notify(Test\PassedButRisky $event): void
$telemetrySystem
);
- $emitter->testPassedButRisky();
+ $emitter->testPassedButRisky(
+ $test,
+ $message
+ );
$this->assertSame(1, $subscriber->recordedEventCount());
$this->assertInstanceOf(Test\PassedButRisky::class, $subscriber->lastRecordedEvent());
+
+ $event = $subscriber->lastRecordedEvent();
+
+ $this->assertSame($test, $event->test());
+ $this->assertSame($message, $event->message());
}
public function testTestSkippedByDataProviderDispatchesTestSkippedByDataProviderEvent(): void
diff --git a/tests/unit/Event/Test/PassedButRiskyTest.php b/tests/unit/Event/Test/PassedButRiskyTest.php
index a27cabe98b6..a7d06da746a 100644
--- a/tests/unit/Event/Test/PassedButRiskyTest.php
+++ b/tests/unit/Event/Test/PassedButRiskyTest.php
@@ -10,6 +10,7 @@
namespace PHPUnit\Event\Test;
use PHPUnit\Event\AbstractEventTestCase;
+use PHPUnit\Event\Code;
/**
* @covers \PHPUnit\Event\Test\PassedButRisky
@@ -19,9 +20,21 @@ final class PassedButRiskyTest extends AbstractEventTestCase
public function testConstructorSetsValues(): void
{
$telemetryInfo = self::createTelemetryInfo();
+ $test = new Code\Test(
+ self::class,
+ 'foo',
+ 'foo with data set #123'
+ );
+ $message = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
- $event = new PassedButRisky($telemetryInfo);
+ $event = new PassedButRisky(
+ $telemetryInfo,
+ $test,
+ $message
+ );
$this->assertSame($telemetryInfo, $event->telemetryInfo());
+ $this->assertSame($test, $event->test());
+ $this->assertSame($message, $event->message());
}
}