diff --git a/core/modules/datetime/src/Tests/DateTimeFieldTest.php b/core/modules/datetime/src/Tests/DateTimeFieldTest.php
index 281e78c..e0fa4c2 100644
--- a/core/modules/datetime/src/Tests/DateTimeFieldTest.php
+++ b/core/modules/datetime/src/Tests/DateTimeFieldTest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
-use Drupal\simpletest\WebTestBase;
+use Drupal\field\Tests\FieldTypeTestBase;
 use Drupal\Core\Datetime\DrupalDateTime;
 
 /**
@@ -17,7 +17,7 @@
  *
  * @group datetime
  */
-class DateTimeFieldTest extends WebTestBase {
+class DateTimeFieldTest extends FieldTypeTestBase {
 
   /**
    * Modules to enable.
@@ -141,6 +141,7 @@ function testDateField() {
 
     // Verify that the plain formatter works.
     $this->display_options['type'] = 'datetime_plain';
+    $this->display_options['settings'] = array();
     entity_get_display($this->field->entity_type, $this->field->bundle, 'full')
       ->setComponent($field_name, $this->display_options)
       ->save();
@@ -206,6 +207,7 @@ function testDatetimeField() {
 
     // Verify that the plain formatter works.
     $this->display_options['type'] = 'datetime_plain';
+    $this->display_options['settings'] = array();
     entity_get_display($this->field->entity_type, $this->field->bundle, 'full')
       ->setComponent($field_name, $this->display_options)
       ->save();
diff --git a/core/modules/field/src/Tests/Email/EmailFieldTest.php b/core/modules/field/src/Tests/Email/EmailFieldTest.php
index 2ce3c46..3672cfb 100644
--- a/core/modules/field/src/Tests/Email/EmailFieldTest.php
+++ b/core/modules/field/src/Tests/Email/EmailFieldTest.php
@@ -8,14 +8,14 @@
 namespace Drupal\field\Tests\Email;
 
 use Drupal\Component\Utility\Unicode;
-use Drupal\simpletest\WebTestBase;
+use Drupal\field\Tests\FieldTypeTestBase;
 
 /**
  * Tests email field functionality.
  *
  * @group field
  */
-class EmailFieldTest extends WebTestBase {
+class EmailFieldTest extends FieldTypeTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/field/src/Tests/FieldTypeTestBase.php b/core/modules/field/src/Tests/FieldTypeTestBase.php
new file mode 100644
index 0000000..ed92eb9
--- /dev/null
+++ b/core/modules/field/src/Tests/FieldTypeTestBase.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Tests\FieldTypeTestBase.
+ */
+
+namespace Drupal\field\Tests;
+
+use Drupal\simpletest\WebTestBase;
+use Drupal\config\Tests\SchemaCheckTestTrait;
+
+/**
+ * Base class to automatically assert entity display schemas.
+ */
+abstract class FieldTypeTestBase extends WebTestBase {
+
+  use SchemaCheckTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function tearDown() {
+    // Assert schemas for all entity view and form displays.
+    $names = array_merge(
+      $this->container->get('config.storage')->listAll('field.storage.'),
+      $this->container->get('config.storage')->listAll('field.field.')
+    );
+
+    $factory = $this->container->get('config.factory');
+    /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */
+    $typed_config = $this->container->get('config.typed');
+    foreach ($names as $name) {
+      $config = $factory->get($name);
+      $this->assertConfigSchema($typed_config, $name, $config->get());
+    }
+
+    parent::tearDown();
+  }
+
+}
diff --git a/core/modules/field/src/Tests/Number/NumberFieldTest.php b/core/modules/field/src/Tests/Number/NumberFieldTest.php
index ca1fbb0..994e96a 100644
--- a/core/modules/field/src/Tests/Number/NumberFieldTest.php
+++ b/core/modules/field/src/Tests/Number/NumberFieldTest.php
@@ -8,14 +8,14 @@
 namespace Drupal\field\Tests\Number;
 
 use Drupal\Component\Utility\Unicode;
-use Drupal\simpletest\WebTestBase;
+use Drupal\field\Tests\FieldTypeTestBase;
 
 /**
  * Tests the creation of numeric fields.
  *
  * @group field
  */
-class NumberFieldTest extends WebTestBase {
+class NumberFieldTest extends FieldTypeTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/field/src/Tests/String/StringFieldTest.php b/core/modules/field/src/Tests/String/StringFieldTest.php
new file mode 100644
index 0000000..faebcee
--- /dev/null
+++ b/core/modules/field/src/Tests/String/StringFieldTest.php
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * @file
+ * Definition of \Drupal\field\Tests\String\StringFieldTest.
+ */
+
+namespace Drupal\field\Tests\String;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\field\Tests\FieldTypeTestBase;
+
+/**
+ * Tests the creation of string fields.
+ *
+ * @group text
+ */
+class StringFieldTest extends FieldTypeTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('entity_test');
+
+  protected $web_user;
+
+  protected function setUp() {
+    parent::setUp();
+
+    $this->web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
+    $this->drupalLogin($this->web_user);
+  }
+
+  // Test fields.
+
+  /**
+   * Test widgets.
+   */
+  function testTextfieldWidgets() {
+    $this->_testTextfieldWidgets('string', 'string_textfield');
+    $this->_testTextfieldWidgets('string_long', 'string_textarea');
+  }
+
+  /**
+   * Helper function for testTextfieldWidgets().
+   */
+  function _testTextfieldWidgets($field_type, $widget_type) {
+    // Create a field.
+    $field_name = Unicode::strtolower($this->randomMachineName());
+    $field_storage = entity_create('field_storage_config', array(
+      'field_name' => $field_name,
+      'entity_type' => 'entity_test',
+      'type' => $field_type
+    ));
+    $field_storage->save();
+    entity_create('field_config', array(
+      'field_storage' => $field_storage,
+      'bundle' => 'entity_test',
+      'label' => $this->randomMachineName() . '_label',
+    ))->save();
+    entity_get_form_display('entity_test', 'entity_test', 'default')
+      ->setComponent($field_name, array(
+        'type' => $widget_type,
+        'settings' => array(
+          'placeholder' => 'A placeholder on ' . $widget_type,
+        ),
+      ))
+      ->save();
+    entity_get_display('entity_test', 'entity_test', 'full')
+      ->setComponent($field_name)
+      ->save();
+
+    // Display creation form.
+    $this->drupalGet('entity_test/add');
+    $this->assertFieldByName("{$field_name}[0][value]", '', 'Widget is displayed');
+    $this->assertNoFieldByName("{$field_name}[0][format]", '1', 'Format selector is not displayed');
+    $this->assertRaw(format_string('placeholder="A placeholder on !widget_type"', array('!widget_type' => $widget_type)));
+
+    // Submit with some value.
+    $value = $this->randomMachineName();
+    $edit = array(
+      "{$field_name}[0][value]" => $value,
+    );
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
+    $id = $match[1];
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
+
+    // Display the entity.
+    $entity = entity_load('entity_test', $id);
+    $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
+    $content = $display->build($entity);
+    $this->drupalSetContent(drupal_render($content));
+    $this->assertText($value, 'Filtered tags are not displayed');
+  }
+}
diff --git a/core/modules/image/src/Tests/ImageFieldTestBase.php b/core/modules/image/src/Tests/ImageFieldTestBase.php
index 33e7fc1..9b374f4 100644
--- a/core/modules/image/src/Tests/ImageFieldTestBase.php
+++ b/core/modules/image/src/Tests/ImageFieldTestBase.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\image\Tests;
 
-use Drupal\simpletest\WebTestBase;
+use Drupal\field\Tests\FieldTypeTestBase;
 
 /**
  * TODO: Test the following functions.
@@ -25,7 +25,7 @@
 /**
  * This class provides methods specifically for testing Image's field handling.
  */
-abstract class ImageFieldTestBase extends WebTestBase {
+abstract class ImageFieldTestBase extends FieldTypeTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/text/src/Tests/TextFieldTest.php b/core/modules/text/src/Tests/TextFieldTest.php
index e771af9..e8ece1f 100644
--- a/core/modules/text/src/Tests/TextFieldTest.php
+++ b/core/modules/text/src/Tests/TextFieldTest.php
@@ -9,31 +9,21 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Component\Utility\Unicode;
-use Drupal\simpletest\WebTestBase;
+use Drupal\field\Tests\String\StringFieldTest;
 
 /**
  * Tests the creation of text fields.
  *
  * @group text
  */
-class TextFieldTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('entity_test');
+class TextFieldTest extends StringFieldTest {
 
   protected $admin_user;
-  protected $web_user;
 
   protected function setUp() {
     parent::setUp();
 
     $this->admin_user = $this->drupalCreateUser(array('administer filters'));
-    $this->web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
-    $this->drupalLogin($this->web_user);
   }
 
   // Test fields.
@@ -82,59 +72,6 @@ function testTextfieldWidgets() {
   }
 
   /**
-   * Helper function for testTextfieldWidgets().
-   */
-  function _testTextfieldWidgets($field_type, $widget_type) {
-    // Create a field.
-    $field_name = Unicode::strtolower($this->randomMachineName());
-    $field_storage = entity_create('field_storage_config', array(
-      'field_name' => $field_name,
-      'entity_type' => 'entity_test',
-      'type' => $field_type
-    ));
-    $field_storage->save();
-    entity_create('field_config', array(
-      'field_storage' => $field_storage,
-      'bundle' => 'entity_test',
-      'label' => $this->randomMachineName() . '_label',
-    ))->save();
-    entity_get_form_display('entity_test', 'entity_test', 'default')
-      ->setComponent($field_name, array(
-        'type' => $widget_type,
-        'settings' => array(
-          'placeholder' => 'A placeholder on ' . $widget_type,
-        ),
-      ))
-      ->save();
-    entity_get_display('entity_test', 'entity_test', 'full')
-      ->setComponent($field_name)
-      ->save();
-
-    // Display creation form.
-    $this->drupalGet('entity_test/add');
-    $this->assertFieldByName("{$field_name}[0][value]", '', 'Widget is displayed');
-    $this->assertNoFieldByName("{$field_name}[0][format]", '1', 'Format selector is not displayed');
-    $this->assertRaw(format_string('placeholder="A placeholder on !widget_type"', array('!widget_type' => $widget_type)));
-
-    // Submit with some value.
-    $value = $this->randomMachineName();
-    $edit = array(
-      "{$field_name}[0][value]" => $value,
-    );
-    $this->drupalPostForm(NULL, $edit, t('Save'));
-    preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
-    $id = $match[1];
-    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
-
-    // Display the entity.
-    $entity = entity_load('entity_test', $id);
-    $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
-    $content = $display->build($entity);
-    $this->drupalSetContent(drupal_render($content));
-    $this->assertText($value, 'Filtered tags are not displayed');
-  }
-
-  /**
    * Test widgets + 'formatted_text' setting.
    */
   function testTextfieldWidgetsFormatted() {
