diff --git a/core/modules/rest/tests/src/Unit/EntityResourceValidationTraitTest.php b/core/modules/rest/tests/src/Unit/EntityResourceValidationTraitTest.php
index 1814b113a2bd507ab4f0b2fb1b3f3cbc0b6d70dc..e809f8eba00dfc8fa1005fd380e5408c6bd8d9db 100644
--- a/core/modules/rest/tests/src/Unit/EntityResourceValidationTraitTest.php
+++ b/core/modules/rest/tests/src/Unit/EntityResourceValidationTraitTest.php
@@ -75,7 +75,6 @@ public function testFailedValidate() {
 /**
  * A test class to use to test EntityResourceValidationTrait.
  *
- * Using ->getMockForTrait is problematic, as this trait is marked internal.
  * Because the mock doesn't use the \Drupal namespace, the Symfony 4+ class
  * loader will throw a deprecation error.
  */
diff --git a/core/tests/Drupal/KernelTests/Core/Installer/InstallerRedirectTraitTest.php b/core/tests/Drupal/KernelTests/Core/Installer/InstallerRedirectTraitTest.php
index b26b69147fb82f221838ae02d656ce053fc658f9..293bb4695d52fddca5229e88b1263c01c65c0a16 100644
--- a/core/tests/Drupal/KernelTests/Core/Installer/InstallerRedirectTraitTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Installer/InstallerRedirectTraitTest.php
@@ -73,9 +73,9 @@ public function testShouldRedirectToInstaller($expected, $exception, $connection
     }
     catch (\Exception $e) {
       // Mock the trait.
-      $trait = $this->getMockBuilder(InstallerRedirectTrait::class)
+      $trait = $this->getMockBuilder(InstallerRedirectTraitMockableClass::class)
         ->onlyMethods(['isCli'])
-        ->getMockForTrait();
+        ->getMock();
 
       // Make sure that the method thinks we are not using the cli.
       $trait->expects($this->any())
@@ -125,3 +125,12 @@ public function testShouldRedirectToInstaller($expected, $exception, $connection
   }
 
 }
+
+/**
+ * A class using the InstallerRedirectTrait for mocking purposes.
+ */
+class InstallerRedirectTraitMockableClass {
+
+  use InstallerRedirectTrait;
+
+}
diff --git a/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryCachedTraitTest.php b/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryCachedTraitTest.php
index ca63bff0cdad98362dd659b73b8e500a59775643..cd2bbcea11bdf2be5e1ad852017c8ed389a57ac4 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryCachedTraitTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryCachedTraitTest.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\Tests\Component\Plugin\Discovery;
 
+use Drupal\Component\Plugin\Discovery\DiscoveryCachedTrait;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -35,8 +36,9 @@ public static function providerGetDefinition() {
    * @dataProvider providerGetDefinition
    */
   public function testGetDefinition($expected, $cached_definitions, $get_definitions, $plugin_id) {
-    // Mock a DiscoveryCachedTrait.
-    $trait = $this->getMockForTrait('Drupal\Component\Plugin\Discovery\DiscoveryCachedTrait');
+    $trait = $this->getMockBuilder(DiscoveryCachedTraitMockableClass::class)
+      ->onlyMethods(['getDefinitions'])
+      ->getMock();
     $reflection_definitions = new \ReflectionProperty($trait, 'definitions');
     // getDefinition() needs the ::$definitions property to be set in one of two
     // ways: 1) As existing cached data, or 2) as a side-effect of calling
@@ -64,3 +66,16 @@ public function testGetDefinition($expected, $cached_definitions, $get_definitio
   }
 
 }
+
+/**
+ * A class using the DiscoveryCachedTrait for mocking purposes.
+ */
+class DiscoveryCachedTraitMockableClass {
+
+  use DiscoveryCachedTrait;
+
+  public function getDefinitions(): array {
+    return [];
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryTraitTest.php b/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryTraitTest.php
index fce4210daec97fc4f60a89dd7de20e68ad6db6fb..16858ae5d13fb60cb4a69942a416a5e9554dc7ec 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryTraitTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/Discovery/DiscoveryTraitTest.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\Tests\Component\Plugin\Discovery;
 
+use Drupal\Component\Plugin\Discovery\DiscoveryTrait;
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
 use PHPUnit\Framework\TestCase;
 
@@ -33,8 +34,7 @@ public static function providerDoGetDefinition() {
    * @dataProvider providerDoGetDefinition
    */
   public function testDoGetDefinition($expected, $definitions, $plugin_id) {
-    // Mock the trait.
-    $trait = $this->getMockForTrait('Drupal\Component\Plugin\Discovery\DiscoveryTrait');
+    $trait = new DiscoveryTraitMockableClass();
     // Un-protect the method using reflection.
     $method_ref = new \ReflectionMethod($trait, 'doGetDefinition');
     // Call doGetDefinition, with $exception_on_invalid always FALSE.
@@ -64,8 +64,7 @@ public static function providerDoGetDefinitionException() {
    * @uses \Drupal\Component\Plugin\Exception\PluginNotFoundException
    */
   public function testDoGetDefinitionException($expected, $definitions, $plugin_id) {
-    // Mock the trait.
-    $trait = $this->getMockForTrait('Drupal\Component\Plugin\Discovery\DiscoveryTrait');
+    $trait = new DiscoveryTraitMockableClass();
     // Un-protect the method using reflection.
     $method_ref = new \ReflectionMethod($trait, 'doGetDefinition');
     // Call doGetDefinition, with $exception_on_invalid always TRUE.
@@ -81,7 +80,9 @@ public function testGetDefinition($expected, $definitions, $plugin_id) {
     // Since getDefinition is a wrapper around doGetDefinition(), we can re-use
     // its data provider. We just have to tell abstract method getDefinitions()
     // to use the $definitions array.
-    $trait = $this->getMockForTrait('Drupal\Component\Plugin\Discovery\DiscoveryTrait');
+    $trait = $this->getMockBuilder(DiscoveryTraitMockableClass::class)
+      ->onlyMethods(['getDefinitions'])
+      ->getMock();
     $trait->expects($this->once())
       ->method('getDefinitions')
       ->willReturn($definitions);
@@ -101,7 +102,9 @@ public function testGetDefinitionException($expected, $definitions, $plugin_id)
     // Since getDefinition is a wrapper around doGetDefinition(), we can re-use
     // its data provider. We just have to tell abstract method getDefinitions()
     // to use the $definitions array.
-    $trait = $this->getMockForTrait('Drupal\Component\Plugin\Discovery\DiscoveryTrait');
+    $trait = $this->getMockBuilder(DiscoveryTraitMockableClass::class)
+      ->onlyMethods(['getDefinitions'])
+      ->getMock();
     $trait->expects($this->once())
       ->method('getDefinitions')
       ->willReturn($definitions);
@@ -129,9 +132,9 @@ public static function providerHasDefinition() {
    * @dataProvider providerHasDefinition
    */
   public function testHasDefinition($expected, $plugin_id) {
-    $trait = $this->getMockBuilder('Drupal\Component\Plugin\Discovery\DiscoveryTrait')
+    $trait = $this->getMockBuilder(DiscoveryTraitMockableClass::class)
       ->onlyMethods(['getDefinition'])
-      ->getMockForTrait();
+      ->getMock();
     // Set up our mocked getDefinition() to return TRUE for 'valid' and FALSE
     // for 'not_valid'.
     $trait->expects($this->once())
@@ -148,3 +151,16 @@ public function testHasDefinition($expected, $plugin_id) {
   }
 
 }
+
+/**
+ * A class using the DiscoveryTrait for mocking purposes.
+ */
+class DiscoveryTraitMockableClass {
+
+  use DiscoveryTrait;
+
+  public function getDefinitions(): array {
+    return [];
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Core/Form/ConfigFormBaseTraitTest.php b/core/tests/Drupal/Tests/Core/Form/ConfigFormBaseTraitTest.php
index 89c277ded385f0ed610322cbfdf51b79b302dd20..0604fda0b4b7f28d69d3f577a021e75b84b08c8d 100644
--- a/core/tests/Drupal/Tests/Core/Form/ConfigFormBaseTraitTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/ConfigFormBaseTraitTest.php
@@ -45,26 +45,26 @@ public function testConfig() {
    * @covers ::config
    */
   public function testConfigFactoryException() {
-    $trait = $this->getMockForTrait('Drupal\Core\Form\ConfigFormBaseTrait');
-    $config_method = new \ReflectionMethod($trait, 'config');
+    $testObject = new ConfiguredTrait();
 
     // There is no config factory available this should result in an exception.
     $this->expectException(\LogicException::class);
     $this->expectExceptionMessage('No config factory available for ConfigFormBaseTrait');
-    $config_method->invoke($trait, 'editable.config');
+    $config_method = new \ReflectionMethod($testObject, 'config');
+    $config_method->invoke($testObject, 'editable.config');
   }
 
   /**
    * @covers ::config
    */
   public function testConfigFactoryExceptionInvalidProperty() {
-    $trait = $this->getMockForTrait('Drupal\Core\Form\ConfigFormBaseTrait');
-    $config_method = new \ReflectionMethod($trait, 'config');
+    $testObject = new ConfiguredTrait();
 
     // There is no config factory available this should result in an exception.
     $this->expectException(\LogicException::class);
     $this->expectExceptionMessage('No config factory available for ConfigFormBaseTrait');
-    $config_method->invoke($trait, 'editable.config');
+    $config_method = new \ReflectionMethod($testObject, 'config');
+    $config_method->invoke($testObject, 'editable.config');
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Test/TestSetupTraitTest.php b/core/tests/Drupal/Tests/Core/Test/TestSetupTraitTest.php
index e3affb3e77885d9af5cba718b922305554a66e75..5cbdd2b900d06a18f1df1e71147c7970b471f6fe 100644
--- a/core/tests/Drupal/Tests/Core/Test/TestSetupTraitTest.php
+++ b/core/tests/Drupal/Tests/Core/Test/TestSetupTraitTest.php
@@ -36,7 +36,11 @@ public function testChangeDatabasePrefix() {
 
     // Create a mock for testing the trait and set a few properties that are
     // used to avoid unnecessary set up.
-    $test_setup = $this->getMockForTrait(TestSetupTrait::class);
+    $test_setup = new class() {
+
+      use TestSetupTrait;
+
+    };
 
     $reflection = new \ReflectionClass($test_setup);
     $reflection->getProperty('databasePrefix')->setValue($test_setup, 'testDbPrefix');