diff --git a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php
index b4639f2aadd572e701e50c5c2a6d19e95d4c2698..020d382258d82874bc44a02cc815e4c8ce130bb7 100644
--- a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php
+++ b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php
@@ -20,19 +20,39 @@ class LinkAccessConstraintValidatorTest extends UnitTestCase {
   /**
    * Tests the access validation constraint for links.
    *
-   * @param \Drupal\link\LinkItemInterface $value
-   *   The link item.
-   * @param \Drupal\Core\Session\AccountProxyInterface $user
-   *   The user account.
-   * @param bool $valid
-   *   A boolean indicating if the combination is expected to be valid.
-   *
    * @covers ::validate
    * @dataProvider providerValidate
    */
-  public function testValidate($value, $user, $valid) {
-    $context = $this->createMock(ExecutionContextInterface::class);
+  public function testValidate(bool $mayLinkAnyPage, bool $urlAccess, bool $valid): void {
+    // Mock a Url object that returns a boolean indicating user access.
+    $url = $this->getMockBuilder('Drupal\Core\Url')
+      ->disableOriginalConstructor()
+      ->getMock();
+    if ($mayLinkAnyPage) {
+      $url->expects($this->never())
+        ->method('access');
+    }
+    else {
+      $url->expects($this->once())
+        ->method('access')
+        ->willReturn($urlAccess);
+    }
+
+    // Mock a link object that returns the URL object.
+    $link = $this->createMock('Drupal\link\LinkItemInterface');
+    $link->expects($this->any())
+      ->method('getUrl')
+      ->willReturn($url);
+
+    // Mock a user object that returns a boolean indicating user access to all
+    // links.
+    $user = $this->createMock('Drupal\Core\Session\AccountProxyInterface');
+    $user->expects($this->any())
+      ->method('hasPermission')
+      ->with($this->equalTo('link to any page'))
+      ->willReturn($mayLinkAnyPage);
 
+    $context = $this->createMock(ExecutionContextInterface::class);
     if ($valid) {
       $context->expects($this->never())
         ->method('addViolation');
@@ -43,10 +63,9 @@ public function testValidate($value, $user, $valid) {
     }
 
     $constraint = new LinkAccessConstraint();
-
     $validate = new LinkAccessConstraintValidator($user);
     $validate->initialize($context);
-    $validate->validate($value, $constraint);
+    $validate->validate($link, $constraint);
   }
 
   /**
@@ -57,41 +76,11 @@ public function testValidate($value, $user, $valid) {
    *
    * @see \Drupal\Tests\link\LinkAccessConstraintValidatorTest::validate()
    */
-  public function providerValidate() {
-    $data = [];
-
-    $cases = [
-      ['may_link_any_page' => TRUE, 'url_access' => TRUE, 'valid' => TRUE],
-      ['may_link_any_page' => TRUE, 'url_access' => FALSE, 'valid' => TRUE],
-      ['may_link_any_page' => FALSE, 'url_access' => TRUE, 'valid' => TRUE],
-      ['may_link_any_page' => FALSE, 'url_access' => FALSE, 'valid' => FALSE],
-    ];
-
-    foreach ($cases as $case) {
-      // Mock a Url object that returns a boolean indicating user access.
-      $url = $this->getMockBuilder('Drupal\Core\Url')
-        ->disableOriginalConstructor()
-        ->getMock();
-      $url->expects($this->once())
-        ->method('access')
-        ->willReturn($case['url_access']);
-      // Mock a link object that returns the URL object.
-      $link = $this->createMock('Drupal\link\LinkItemInterface');
-      $link->expects($this->any())
-        ->method('getUrl')
-        ->willReturn($url);
-      // Mock a user object that returns a boolean indicating user access to all
-      // links.
-      $user = $this->createMock('Drupal\Core\Session\AccountProxyInterface');
-      $user->expects($this->any())
-        ->method('hasPermission')
-        ->with($this->equalTo('link to any page'))
-        ->willReturn($case['may_link_any_page']);
-
-      $data[] = [$link, $user, $case['valid']];
-    }
-
-    return $data;
+  public static function providerValidate(): \Generator {
+    yield [TRUE, TRUE, TRUE];
+    yield [TRUE, FALSE, TRUE];
+    yield [FALSE, TRUE, TRUE];
+    yield [FALSE, FALSE, FALSE];
   }
 
 }
diff --git a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php
index 9c519b1c3cc50adebed806cb362c18ee5291a16f..27613645a9eea7f490ee41789195a147b7208920 100644
--- a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php
+++ b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php
@@ -4,10 +4,13 @@
 
 namespace Drupal\Tests\link\Unit\Plugin\Validation\Constraint;
 
+use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Url;
+use Drupal\link\LinkItemInterface;
 use Drupal\link\Plugin\Validation\Constraint\LinkNotExistingInternalConstraint;
 use Drupal\link\Plugin\Validation\Constraint\LinkNotExistingInternalConstraintValidator;
 use Drupal\Tests\UnitTestCase;
+use PHPUnit\Framework\MockObject\MockObject;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
 use Symfony\Component\Validator\Context\ExecutionContextInterface;
 
@@ -19,70 +22,70 @@ class LinkNotExistingInternalConstraintValidatorTest extends UnitTestCase {
 
   /**
    * @covers ::validate
-   * @dataProvider providerValidate
    */
-  public function testValidate($value, $valid) {
-    $context = $this->createMock(ExecutionContextInterface::class);
+  public function testValidateFromUri(): void {
+    $url = Url::fromUri('https://www.drupal.org');
 
-    if ($valid) {
-      $context->expects($this->never())
-        ->method('addViolation');
-    }
-    else {
-      $context->expects($this->once())
-        ->method('addViolation');
-    }
+    $link = $this->createMock(LinkItemInterface::class);
+    $link->expects($this->any())
+      ->method('getUrl')
+      ->willReturn($url);
 
-    $constraint = new LinkNotExistingInternalConstraint();
+    $context = $this->createMock(ExecutionContextInterface::class);
+    $context->expects($this->never())
+      ->method('addViolation');
 
-    $validator = new LinkNotExistingInternalConstraintValidator();
-    $validator->initialize($context);
-    $validator->validate($value, $constraint);
+    $this->validate($link, $context);
   }
 
   /**
-   * Data provider for ::testValidate.
+   * @covers ::validate
    */
-  public function providerValidate() {
-    $data = [];
-
-    // External URL
-    $data[] = [Url::fromUri('https://www.drupal.org'), TRUE];
-
-    // Existing routed URL.
+  public function testValidateFromRoute(): void {
     $url = Url::fromRoute('example.existing_route');
 
-    $url_generator = $this->createMock('Drupal\Core\Routing\UrlGeneratorInterface');
-    $url_generator->expects($this->any())
+    $urlGenerator = $this->createMock(UrlGeneratorInterface::class);
+    $urlGenerator->expects($this->any())
       ->method('generateFromRoute')
       ->with('example.existing_route', [], [])
       ->willReturn('/example/existing');
-    $url->setUrlGenerator($url_generator);
+    $url->setUrlGenerator($urlGenerator);
 
-    $data[] = [$url, TRUE];
+    $link = $this->createMock(LinkItemInterface::class);
+    $link->expects($this->any())
+      ->method('getUrl')
+      ->willReturn($url);
 
-    // Non-existent routed URL.
+    $context = $this->createMock(ExecutionContextInterface::class);
+    $context->expects($this->never())
+      ->method('addViolation');
+
+    $this->validate($link, $context);
+  }
+
+  /**
+   * @covers ::validate
+   */
+  public function testValidateFromNonExistingRoute(): void {
     $url = Url::fromRoute('example.not_existing_route');
 
-    $url_generator = $this->createMock('Drupal\Core\Routing\UrlGeneratorInterface');
-    $url_generator->expects($this->any())
+    $urlGenerator = $this->createMock(UrlGeneratorInterface::class);
+    $urlGenerator->expects($this->any())
       ->method('generateFromRoute')
       ->with('example.not_existing_route', [], [])
-      ->willThrowException(new RouteNotFoundException());
-    $url->setUrlGenerator($url_generator);
+      ->willReturn(new RouteNotFoundException());
+    $url->setUrlGenerator($urlGenerator);
 
-    $data[] = [$url, FALSE];
-
-    foreach ($data as &$single_data) {
-      $link = $this->createMock('Drupal\link\LinkItemInterface');
-      $link->expects($this->any())
-        ->method('getUrl')
-        ->willReturn($single_data[0]);
+    $link = $this->createMock(LinkItemInterface::class);
+    $link->expects($this->any())
+      ->method('getUrl')
+      ->willReturn($url);
 
-      $single_data[0] = $link;
-    }
+    $context = $this->createMock(ExecutionContextInterface::class);
+    $context->expects($this->never())
+      ->method('addViolation');
 
-    return $data;
+    $this->validate($link, $context);
   }
 
   /**
@@ -90,8 +93,8 @@ public function providerValidate() {
    *
    * @see \Drupal\Core\Url::fromUri
    */
-  public function testValidateWithMalformedUri() {
-    $link = $this->createMock('Drupal\link\LinkItemInterface');
+  public function testValidateWithMalformedUri(): void {
+    $link = $this->createMock(LinkItemInterface::class);
     $link->expects($this->any())
       ->method('getUrl')
       ->willThrowException(new \InvalidArgumentException());
@@ -100,11 +103,16 @@ public function testValidateWithMalformedUri() {
     $context->expects($this->never())
       ->method('addViolation');
 
-    $constraint = new LinkNotExistingInternalConstraint();
+    $this->validate($link, $context);
+  }
 
+  /**
+   * Validate the link.
+   */
+  protected function validate(LinkItemInterface&MockObject $link, ExecutionContextInterface&MockObject $context): void {
     $validator = new LinkNotExistingInternalConstraintValidator();
     $validator->initialize($context);
-    $validator->validate($link, $constraint);
+    $validator->validate($link, new LinkNotExistingInternalConstraint());
   }
 
 }