diff --git a/core/lib/Drupal/Component/Plugin/Derivative/DeriverBase.php b/core/lib/Drupal/Component/Plugin/Derivative/DeriverBase.php
index f989bf6..d4d7cb2 100644
--- a/core/lib/Drupal/Component/Plugin/Derivative/DeriverBase.php
+++ b/core/lib/Drupal/Component/Plugin/Derivative/DeriverBase.php
@@ -23,11 +23,8 @@
    * {@inheritdoc}
    */
   public function getDerivativeDefinition($derivative_id, $base_plugin_definition) {
-    if (!empty($this->derivatives) && !empty($this->derivatives[$derivative_id])) {
-      return $this->derivatives[$derivative_id];
-    }
-    $this->getDerivativeDefinitions($base_plugin_definition);
-    return $this->derivatives[$derivative_id];
+    $definitions = $this->getDerivativeDefinitions($base_plugin_definition);
+    return isset($definitions[$derivative_id]) ? $definitions[$derivative_id] : NULL;
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Component/Plugin/Derivative/DeriverBaseTest.php b/core/tests/Drupal/Tests/Component/Plugin/Derivative/DeriverBaseTest.php
new file mode 100644
index 0000000..63b4c2b
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Plugin/Derivative/DeriverBaseTest.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Component\Plugin\Derivative\DeriverBaseTest.
+ */
+
+namespace Drupal\Tests\Component\Plugin\Derivative;
+
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass Drupal\Component\Plugin\Derivative\DeriverBase
+ */
+class DeriverBaseTest extends UnitTestCase {
+
+  /**
+   * Provides data to self::testGetDerivativeDefinition().
+   *
+   * @return array
+   *   - Derivatives definition array to set into ::$derivatives.
+   *   - The derivative ID to query for within the derivatives array. This value
+   *     is passed to getDerivativeDefinition().
+   */
+  public function providerGetDerivativeDefinition() {
+    $derivative_id = $this->randomMachineName();
+
+    $derivative_definitions = [
+      $derivative_id => [
+        'id' => $this->randomMachineName() . ':' . $derivative_id,
+      ],
+    ];
+
+    return [
+      [$derivative_definitions[$derivative_id], $derivative_definitions, $derivative_id],
+      [NULL, $derivative_definitions, $this->randomMachineName()],
+    ];
+  }
+
+  /**
+   * @covers ::getDerivativeDefinition
+   * @dataProvider providerGetDerivativeDefinition
+   */
+  public function testGetDerivativeDefinition($expected_derivative_definition, $derivative_definitions, $derivative_id) {
+    $deriver = new DeriverBaseTestDeriverBaseDummy($derivative_definitions);
+
+    $derivative_definition = $deriver->getDerivativeDefinition($derivative_id, []);
+    $this->assertSame($expected_derivative_definition, $derivative_definition);
+  }
+
+}
+
+/**
+ * Provides DeriverBase with settable derivatives.
+ */
+class DeriverBaseTestDeriverBaseDummy extends DeriverBase {
+
+  /**
+   * Constructs a new instance.
+   *
+   * @param mixed[] $derivative_definitions
+   */
+  public function __construct(array $derivative_definitions) {
+    $this->derivatives = $derivative_definitions;
+  }
+
+}
