diff --git a/CHANGELOG.md b/CHANGELOG.md index 072e680d..d13d52d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ For a full diff see [`7afa59c...main`][7afa59c...main]. * Renamed `SlowTestReporter` to `Reporter\Reporter` ([#20]), by [@localheinz] * Renamed `Reporter\Reporter` to `Reporter\DefaultReporter` and extracted `Reporter\Reporter` interface ([#21]), by [@localheinz] * Renamed `Collector` to `Collector\DefaultCollector` and extracted `Collector\Collector` interface ([#24]), by [@localheinz] +* Used `TimeKeeper` instead of `SlowTestCollector` in `Subscriber\TestPreparedSubscriber` ([#25]), by [@localheinz] [7afa59c...main]: https://github.com/ergebnis/phpunit-slow-test-detector/compare/7afa59c...main @@ -40,5 +41,6 @@ For a full diff see [`7afa59c...main`][7afa59c...main]. [#22]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/22 [#23]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/23 [#24]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/24 +[#25]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/25 [@localheinz]: https://github.com/localheinz diff --git a/src/Subscriber/TestPreparedSubscriber.php b/src/Subscriber/TestPreparedSubscriber.php index 7e608087..e61e0aff 100644 --- a/src/Subscriber/TestPreparedSubscriber.php +++ b/src/Subscriber/TestPreparedSubscriber.php @@ -13,21 +13,21 @@ namespace Ergebnis\PHPUnit\SlowTestDetector\Subscriber; -use Ergebnis\PHPUnit\SlowTestDetector\SlowTestCollector; +use Ergebnis\PHPUnit\SlowTestDetector\TimeKeeper; use PHPUnit\Event; final class TestPreparedSubscriber implements Event\Test\PreparedSubscriber { - private SlowTestCollector $slowTestCollector; + private TimeKeeper $timeKeeper; - public function __construct(SlowTestCollector $slowTestCollector) + public function __construct(TimeKeeper $timeKeeper) { - $this->slowTestCollector = $slowTestCollector; + $this->timeKeeper = $timeKeeper; } public function notify(Event\Test\Prepared $event): void { - $this->slowTestCollector->testPrepared( + $this->timeKeeper->start( $event->test(), $event->telemetryInfo()->time() ); diff --git a/test/Unit/Subscriber/TestPreparedSubscriberTest.php b/test/Unit/Subscriber/TestPreparedSubscriberTest.php index fc9b8400..b37da8e3 100644 --- a/test/Unit/Subscriber/TestPreparedSubscriberTest.php +++ b/test/Unit/Subscriber/TestPreparedSubscriberTest.php @@ -13,10 +13,8 @@ namespace Ergebnis\PHPUnit\SlowTestDetector\Test\Unit\Subscriber; -use Ergebnis\PHPUnit\SlowTestDetector\SlowTest; -use Ergebnis\PHPUnit\SlowTestDetector\SlowTestCollector; use Ergebnis\PHPUnit\SlowTestDetector\Subscriber\TestPreparedSubscriber; -use Ergebnis\PHPUnit\SlowTestDetector\Test\Double; +use Ergebnis\PHPUnit\SlowTestDetector\Test\Fixture; use Ergebnis\PHPUnit\SlowTestDetector\TimeKeeper; use Ergebnis\Test\Util; use PHPUnit\Event; @@ -28,103 +26,58 @@ * @covers \Ergebnis\PHPUnit\SlowTestDetector\Subscriber\TestPreparedSubscriber * * @uses \Ergebnis\PHPUnit\SlowTestDetector\SlowTest - * @uses \Ergebnis\PHPUnit\SlowTestDetector\SlowTestCollector * @uses \Ergebnis\PHPUnit\SlowTestDetector\TimeKeeper */ final class TestPreparedSubscriberTest extends Framework\TestCase { use Util\Helper; - public function testNotifyCollectsPreparedTest(): void + public function testNotifyRecordsTestStartWithTimeKeeper(): void { $faker = self::faker(); - $maximumDuration = Event\Telemetry\Duration::fromSeconds($faker->numberBetween( - 5, - 10 - )); - $preparedTime = Event\Telemetry\HRTime::fromSecondsAndNanoseconds( $faker->numberBetween(), - 0 + $faker->numberBetween(0, 999_999_999) ); - $preparedTest = self::createTest('test'); + $preparedTest = new Event\Code\Test( + Fixture\ExampleTest::class, + 'foo', + 'foo with data set #123' + ); $preparedTestEvent = new Event\Test\Prepared( - self::createTelemetryInfo($preparedTime), + new Event\Telemetry\Info( + new Event\Telemetry\Snapshot( + $preparedTime, + Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()), + Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()) + ), + Event\Telemetry\Duration::fromSeconds($faker->numberBetween()), + Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()), + Event\Telemetry\Duration::fromSeconds($faker->numberBetween()), + Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()), + ), $preparedTest ); - $passedTime = Event\Telemetry\HRTime::fromSecondsAndNanoseconds( - $preparedTime->seconds() + $maximumDuration->seconds() + 1, - 0 - ); + $timeKeeper = new TimeKeeper(); - $passedTest = clone $preparedTest; - - $slowTestCollector = new SlowTestCollector( - $maximumDuration, - new TimeKeeper(), - new Double\Collector\AppendingCollector() - ); - - $subscriber = new TestPreparedSubscriber($slowTestCollector); + $subscriber = new TestPreparedSubscriber($timeKeeper); $subscriber->notify($preparedTestEvent); - self::assertSame([], $slowTestCollector->slowTests()); - - $slowTestCollector->testPassed( - $passedTest, - $passedTime - ); - - $expected = [ - SlowTest::fromTestAndDuration( - $passedTest, - $passedTime->duration($preparedTime) - ), - ]; - - self::assertEquals($expected, $slowTestCollector->slowTests()); - } - - private static function createTelemetryInfo(Event\Telemetry\HRTime $time): Event\Telemetry\Info - { - $faker = self::faker(); - - return new Event\Telemetry\Info( - new Event\Telemetry\Snapshot( - $time, - Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()), - Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()) - ), - Event\Telemetry\Duration::fromSeconds($faker->numberBetween()), - Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()), - Event\Telemetry\Duration::fromSeconds($faker->numberBetween()), - Event\Telemetry\MemoryUsage::fromBytes($faker->numberBetween()), + $passedTime = Event\Telemetry\HRTime::fromSecondsAndNanoseconds( + $faker->numberBetween($preparedTime->seconds()), + 0 ); - } - - private static function createTest(string $methodName): Event\Code\Test - { - $faker = self::faker(); - $methodNameWithDataSet = \sprintf( - '%s with data set #%d', - $methodName, - $faker->numberBetween() + $duration = $timeKeeper->stop( + clone $preparedTest, + $passedTime ); - if ($faker->boolean) { - $methodNameWithDataSet = $methodName; - } - - return new Event\Code\Test( - self::class, - $methodName, - $methodNameWithDataSet - ); + self::assertEquals($passedTime->duration($preparedTime), $duration); } }