diff --git a/tests/src/Functional/DateRangeTimezoneFormatterTest.php b/tests/src/Functional/DateRangeTimezoneFormatterTest.php
deleted file mode 100644
index 7c6341c..0000000
--- a/tests/src/Functional/DateRangeTimezoneFormatterTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-namespace Drupal\Tests\datetime_range_timezone\Functional;
-
-use Drupal\Core\Datetime\DrupalDateTime;
-
-/**
- * Test the datetime range timezone formatter.
- *
- * @group datetime_range_timezone
- */
-class DateRangeTimezoneFormatterTest extends DateRangeTimezoneTestBase {
-
-  /**
-   * Ensures that the default is rendered with the correct timezone.
-   */
-  public function testRenderedInCorrectTimezone() {
-    $assert = $this->assertSession();
-
-    // Create an entity with a start and end date. The dates are stored in UTC
-    // and then we specify the timezone that the user wants to input and
-    // display.
-    $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'UTC');
-    $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'UTC');
-    $entity = $this->createTestEntity($start_date, $end_date, 'America/New_York');
-
-    // Convert our dates to America/New_York.
-    $timezone = new \DateTimeZone('America/New_York');
-    $start_date->setTimeZone($timezone);
-    $end_date->setTimeZone($timezone);
-
-    // Visit the page.
-    $this->drupalGet($entity->toUrl());
-
-    // Ensure the daterange is formatted using America/New York timezone using
-    // the medium date format type.
-    $assert->pageTextContains($start_date->format('D, m/d/Y - H:i'));
-    $assert->pageTextContains($end_date->format('D, m/d/Y - H:i'));
-
-    // Ensure the nice version of the timezone is printed.
-    $assert->pageTextContains('America/New York');
-  }
-
-  /**
-   * If we disable the timezone it should not be displayed.
-   */
-  public function testRenderedWithoutTimezone() {
-    $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'UTC');
-    $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'UTC');
-    $entity = $this->createTestEntity($start_date, $end_date, 'America/New_York');
-
-    // Timezone is displayed by default.
-    $this->drupalGet($entity->toUrl());
-    $this->assertSession()->pageTextContains('America/New York');
-
-    // Disable the timezone in the formatter settings.
-    entity_get_display('entity_test', 'entity_test', 'full')
-      ->setComponent('date', [
-        'type' => 'daterange_timezone',
-        'settings' => [
-          'format_type' => 'medium',
-          'display_timezone' => FALSE,
-        ],
-      ])
-      ->save();
-
-    // Timezone no longer displayed.
-    $this->drupalGet($entity->toUrl());
-    $this->assertSession()->pageTextNotContains('America/New York');
-  }
-
-}
diff --git a/tests/src/Functional/DateRangeTimezoneTestBase.php b/tests/src/Functional/DateRangeTimezoneTestBase.php
index 6ebfadd..a9ff148 100644
--- a/tests/src/Functional/DateRangeTimezoneTestBase.php
+++ b/tests/src/Functional/DateRangeTimezoneTestBase.php
@@ -2,17 +2,16 @@
 
 namespace Drupal\Tests\datetime_range_timezone\Functional;
 
-use Drupal\Core\Datetime\DrupalDateTime;
-use Drupal\entity_test\Entity\EntityTest;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\Tests\BrowserTestBase;
+use Drupal\Tests\datetime_range_timezone\Kernel\DateRangeTimezoneHelperTrait;
 
 /**
  * Base class for testing.
  */
 abstract class DateRangeTimezoneTestBase extends BrowserTestBase {
 
+  use DateRangeTimezoneHelperTrait;
+
   /**
    * Modules to enable.
    *
@@ -25,29 +24,7 @@ abstract class DateRangeTimezoneTestBase extends BrowserTestBase {
    */
   public function setUp() {
     parent::setUp();
-    $field_storage = FieldStorageConfig::create([
-      'field_name' => 'date',
-      'entity_type' => 'entity_test',
-      'type' => 'daterange_timezone',
-    ]);
-    $field_storage->save();
-
-    $field_config = FieldConfig::create([
-      'field_storage' => $field_storage,
-      'bundle' => 'entity_test',
-    ]);
-    $field_config->save();
-
-    entity_get_form_display('entity_test', 'entity_test', 'default')
-      ->setComponent('date', [
-        'type' => 'daterange_timezone',
-      ])
-      ->save();
-    entity_get_display('entity_test', 'entity_test', 'full')
-      ->setComponent('date', [
-        'type' => 'daterange_timezone',
-      ])
-      ->save();
+    $this->setupDatetimeRangeTimezoneField();
 
     $this->drupalLogin($this->drupalCreateUser([
       'view test entity',
@@ -55,29 +32,4 @@ abstract class DateRangeTimezoneTestBase extends BrowserTestBase {
     ]));
   }
 
-  /**
-   * Creates the test entity.
-   *
-   * @param \Drupal\Core\Datetime\DrupalDateTime $start_date
-   *   The start date.
-   * @param \Drupal\Core\Datetime\DrupalDateTime $end_date
-   *   The end date.
-   * @param string $timezone
-   *   The timezone as a string.
-   *
-   * @return \Drupal\Core\Entity\EntityInterface|static
-   *   The saved entity.
-   */
-  protected function createTestEntity(DrupalDateTime $start_date, DrupalDateTime $end_date, $timezone) {
-    $entity = EntityTest::create([
-      'date' => [
-        'value' => $start_date->format(DATETIME_DATETIME_STORAGE_FORMAT),
-        'end_value' => $end_date->format(DATETIME_DATETIME_STORAGE_FORMAT),
-        'timezone' => $timezone,
-      ],
-    ]);
-    $entity->save();
-    return $entity;
-  }
-
 }
diff --git a/tests/src/Kernel/DateRangeTimezoneFormatterTest.php b/tests/src/Kernel/DateRangeTimezoneFormatterTest.php
new file mode 100644
index 0000000..63f5b6d
--- /dev/null
+++ b/tests/src/Kernel/DateRangeTimezoneFormatterTest.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\Tests\datetime_range_timezone\Kernel;
+
+use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Test the default formatter.
+ *
+ * @group datetime_range_timezone
+ */
+class DateRangeTimezoneFormatterTest extends KernelTestBase {
+
+  use DateRangeTimezoneHelperTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'user',
+    'system',
+    'field',
+    'text',
+    'entity_test',
+    'datetime',
+    'datetime_range',
+    'datetime_range_timezone',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(['system']);
+    $this->installEntitySchema('entity_test');
+
+    EntityViewDisplay::create([
+      'targetEntityType' => 'entity_test',
+      'bundle' => 'entity_test',
+      'mode' => 'default',
+    ])->save();
+
+    $this->setupDatetimeRangeTimezoneField();
+  }
+
+  /**
+   * Ensure the field is rendered in the correct timezone.
+   */
+  public function testRenderedInCorrectTimezone() {
+    $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'UTC');
+    $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'UTC');
+    $entity = $this->createTestEntity($start_date, $end_date, 'America/New_York');
+
+    // Convert our dates to America/New_York.
+    $timezone = new \DateTimeZone('America/New_York');
+    $start_date->setTimeZone($timezone);
+    $end_date->setTimeZone($timezone);
+
+    // Render the field.
+    $output = $entity->date->view([]);
+
+    // Ensure the daterange is formatted using America/New York timezone using
+    // the medium date format type.
+    $this->assertEquals($start_date->format('D, m/d/Y - H:i'), $output[0]['#start_date']);
+    $this->assertEquals($end_date->format('D, m/d/Y - H:i'), $output[0]['#end_date']);
+
+    // Ensure the nice version of the timezone is printed.
+    $this->assertEquals('America/New York', (string) $output[0]['#timezone']);
+  }
+
+  /**
+   * If we disable the timezone it should not be displayed.
+   */
+  public function testRenderedWithoutTimezone() {
+    $start_date = new DrupalDateTime('2017-03-25 10:30:00', 'UTC');
+    $end_date = new DrupalDateTime('2017-03-28 10:30:00', 'UTC');
+    $entity = $this->createTestEntity($start_date, $end_date, 'America/New_York');
+
+    // Timezone is displayed by default.
+    $output = $entity->date->view([]);
+    $this->assertEquals('America/New York', (string) $output[0]['#timezone']);
+
+    $output = $entity->date->view([
+      'settings' => [
+        'format_type' => 'medium',
+        'display_timezone' => FALSE,
+      ],
+    ]);
+    $this->assertNull($output[0]['#timezone']);
+  }
+
+}
diff --git a/tests/src/Functional/DateRangeTimezoneTestBase.php b/tests/src/Kernel/DateRangeTimezoneHelperTrait.php
similarity index 69%
copy from tests/src/Functional/DateRangeTimezoneTestBase.php
copy to tests/src/Kernel/DateRangeTimezoneHelperTrait.php
index 6ebfadd..e611bb5 100644
--- a/tests/src/Functional/DateRangeTimezoneTestBase.php
+++ b/tests/src/Kernel/DateRangeTimezoneHelperTrait.php
@@ -1,32 +1,26 @@
 <?php
 
-namespace Drupal\Tests\datetime_range_timezone\Functional;
+namespace Drupal\Tests\datetime_range_timezone\Kernel;
 
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\Tests\BrowserTestBase;
 
 /**
- * Base class for testing.
+ * Helper methods for tests.
  */
-abstract class DateRangeTimezoneTestBase extends BrowserTestBase {
+trait DateRangeTimezoneHelperTrait {
 
   /**
-   * Modules to enable.
+   * Creates the field storage and config on the test entity.
    *
-   * @var array
+   * @param string $field_name
+   *   (optional) The field name.
    */
-  public static $modules = ['entity_test', 'datetime_range_timezone'];
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
-    parent::setUp();
+  protected function setupDatetimeRangeTimezoneField($field_name = 'date') {
     $field_storage = FieldStorageConfig::create([
-      'field_name' => 'date',
+      'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'daterange_timezone',
     ]);
@@ -39,20 +33,15 @@ abstract class DateRangeTimezoneTestBase extends BrowserTestBase {
     $field_config->save();
 
     entity_get_form_display('entity_test', 'entity_test', 'default')
-      ->setComponent('date', [
+      ->setComponent($field_name, [
         'type' => 'daterange_timezone',
       ])
       ->save();
-    entity_get_display('entity_test', 'entity_test', 'full')
-      ->setComponent('date', [
+    entity_get_display('entity_test', 'entity_test', 'default')
+      ->setComponent($field_name, [
         'type' => 'daterange_timezone',
       ])
       ->save();
-
-    $this->drupalLogin($this->drupalCreateUser([
-      'view test entity',
-      'administer entity_test content',
-    ]));
   }
 
   /**
