diff --git a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
index 80cc70f575c388306f822d25f077cd08c67a3234..64a276ec8860a758e84c5b6c61a15fe0f9185c3d 100644
--- a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
+++ b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
@@ -3,12 +3,9 @@
 namespace Drupal\Tests\automatic_updates_extensions\Kernel;
 
 use Drupal\automatic_updates_extensions\ExtensionUpdater;
-use Drupal\package_manager\Event\StageEvent;
-use Drupal\package_manager\Exception\StageException;
 use Drupal\package_manager\Exception\StageValidationException;
-use Drupal\package_manager\Stage;
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
-use Drupal\Tests\package_manager\Kernel\TestStage;
+use Drupal\Tests\package_manager\Kernel\TestStageTrait;
 use GuzzleHttp\Client;
 use GuzzleHttp\Handler\MockHandler;
 use GuzzleHttp\HandlerStack;
@@ -124,29 +121,6 @@ abstract class AutomaticUpdatesExtensionsKernelTestBase extends AutomaticUpdates
  */
 class TestExtensionUpdater extends ExtensionUpdater {
 
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(...$arguments) {
-    parent::__construct(...$arguments);
-
-    $mirror = new \ReflectionClass(Stage::class);
-    $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), TestStage::$stagingRoot);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function dispatch(StageEvent $event, callable $on_error = NULL): void {
-    try {
-      parent::dispatch($event, $on_error);
-    }
-    catch (StageException $e) {
-      // Attach the event object to the exception so that test code can verify
-      // that the exception was thrown when a specific event was dispatched.
-      $e->event = $event;
-      throw $e;
-    }
-  }
+  use TestStageTrait;
 
 }
diff --git a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
index 793253504af5a7d24ad090397b5760bf5b6a4459..cc2e2e4d4eb347aa2a6b61ab576bf657ab906502 100644
--- a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
+++ b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
@@ -31,6 +31,17 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
     'package_manager_bypass',
   ];
 
+  /**
+   * The test staging root.
+   *
+   * This value must be set before creating a test stage instance.
+   *
+   * @var string
+   *
+   * @see \Drupal\Tests\package_manager\Kernel\TestStageTrait::__construct()
+   */
+  public static $testStagingRoot;
+
   /**
    * The service IDs of any validators to disable.
    *
@@ -175,7 +186,7 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
     // Create a staging root directory alongside the active directory.
     $stage_dir = vfsStream::newDirectory('stage');
     $this->vfsRoot->addChild($stage_dir);
-    TestStage::$stagingRoot = $stage_dir->url();
+    static::$testStagingRoot = $stage_dir->url();
 
     $path_locator = $this->mockPathLocator($active_dir->url());
 
@@ -230,9 +241,9 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
 }
 
 /**
- * Defines a stage specifically for testing purposes.
+ * Common functions for test stages.
  */
-class TestStage extends Stage {
+trait TestStageTrait {
 
   /**
    * The directory where staging areas will be created.
@@ -246,9 +257,8 @@ class TestStage extends Stage {
    */
   public function __construct(...$arguments) {
     parent::__construct(...$arguments);
-
-    $mirror = new \ReflectionClass(parent::class);
-    $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), static::$stagingRoot);
+    $mirror = new \ReflectionClass(Stage::class);
+    $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), PackageManagerKernelTestBase::$testStagingRoot);
   }
 
   /**
@@ -266,6 +276,14 @@ class TestStage extends Stage {
     }
   }
 
+}
+/**
+ * Defines a stage specifically for testing purposes.
+ */
+class TestStage extends Stage {
+
+  use TestStageTrait;
+
 }
 
 /**
diff --git a/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php b/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php
index 1679f69b628a82d806f2072e653b3b5d115333dc..de4baeb504a3eafeb72cbb7bdb630d2b3ffdcbd9 100644
--- a/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php
+++ b/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php
@@ -5,10 +5,9 @@ namespace Drupal\Tests\automatic_updates\Kernel;
 use Drupal\automatic_updates\CronUpdater;
 use Drupal\automatic_updates\Updater;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\package_manager\Stage;
 use Drupal\Tests\automatic_updates\Traits\ValidationTestTrait;
 use Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase;
-use Drupal\Tests\package_manager\Kernel\TestStage;
+use Drupal\Tests\package_manager\Kernel\TestStageTrait;
 use GuzzleHttp\Client;
 use GuzzleHttp\Handler\MockHandler;
 use GuzzleHttp\HandlerStack;
@@ -151,15 +150,7 @@ abstract class AutomaticUpdatesKernelTestBase extends PackageManagerKernelTestBa
  */
 class TestUpdater extends Updater {
 
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(...$arguments) {
-    parent::__construct(...$arguments);
-
-    $mirror = new \ReflectionClass(Stage::class);
-    $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), TestStage::$stagingRoot);
-  }
+  use TestStageTrait;
 
 }
 
@@ -168,14 +159,6 @@ class TestUpdater extends Updater {
  */
 class TestCronUpdater extends CronUpdater {
 
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(...$arguments) {
-    parent::__construct(...$arguments);
-
-    $mirror = new \ReflectionClass(Stage::class);
-    $this->tempStore->set($mirror->getConstant('TEMPSTORE_STAGING_ROOT_KEY'), TestStage::$stagingRoot);
-  }
+  use TestStageTrait;
 
 }
diff --git a/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php b/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php
index 142d7d9e214c9cc56a9337397b8084bcd84fc4b9..ff06b1a4eb5d8de54422b4b25e23ffc58b410515 100644
--- a/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php
+++ b/tests/src/Kernel/ReadinessValidation/StagedDatabaseUpdateValidatorTest.php
@@ -5,7 +5,6 @@ namespace Drupal\Tests\automatic_updates\Kernel\ReadinessValidation;
 use Drupal\package_manager\Exception\StageValidationException;
 use Drupal\package_manager\ValidationResult;
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
-use Drupal\Tests\package_manager\Kernel\TestStage;
 
 /**
  * @covers \Drupal\automatic_updates\Validator\StagedDatabaseUpdateValidator
@@ -36,7 +35,7 @@ class StagedDatabaseUpdateValidatorTest extends AutomaticUpdatesKernelTestBase {
     $this->disableValidators[] = 'package_manager.validator.lock_file';
     parent::setUp();
 
-    TestStage::$stagingRoot = $this->vfsRoot->url();
+    static::$testStagingRoot = $this->vfsRoot->url();
 
     /** @var \Drupal\Tests\automatic_updates\Kernel\TestCronUpdater $updater */
     $updater = $this->container->get('automatic_updates.cron_updater');
diff --git a/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php b/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php
index 1bddb5dcd01a4a3143078b7703d8457838603c51..1ea2231aa6500739436726e2a95d2912b62ffd87 100644
--- a/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php
+++ b/tests/src/Kernel/ReadinessValidation/StagedProjectsValidatorTest.php
@@ -5,7 +5,6 @@ namespace Drupal\Tests\automatic_updates\Kernel\ReadinessValidation;
 use Drupal\package_manager\Event\PreApplyEvent;
 use Drupal\package_manager\Exception\StageValidationException;
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
-use Drupal\Tests\package_manager\Kernel\TestStage;
 use org\bovigo\vfs\vfsStream;
 use Symfony\Component\Filesystem\Filesystem;
 
@@ -52,12 +51,12 @@ class StagedProjectsValidatorTest extends AutomaticUpdatesKernelTestBase {
       // subdirectory using the stage ID after it is created below.
       $stage_vfs_dir = vfsStream::newDirectory('au_stage');
       $this->vfsRoot->addChild($stage_vfs_dir);
-      TestStage::$stagingRoot = $stage_vfs_dir->url();
+      static::$testStagingRoot = $stage_vfs_dir->url();
     }
     else {
       // If we are testing non-existent staging directory we can use the path
       // directly.
-      TestStage::$stagingRoot = $stage_dir;
+      static::$testStagingRoot = $stage_dir;
     }
 
     $updater = $this->container->get('automatic_updates.updater');