diff --git a/core/lib/Drupal/Core/Config/Testing/ConfigSchemaChecker.php b/core/lib/Drupal/Core/Config/Testing/ConfigSchemaChecker.php
index cf5f113..dbf6b7c 100644
--- a/core/lib/Drupal/Core/Config/Testing/ConfigSchemaChecker.php
+++ b/core/lib/Drupal/Core/Config/Testing/ConfigSchemaChecker.php
@@ -66,9 +66,20 @@ public function onConfigSave(ConfigCrudEvent $event) {
     $name = $saved_config->getName();
     $data = $saved_config->get();
     $checksum = crc32(serialize($data));
-    // Content translation settings cannot be provided schema yet, see
-    // https://www.drupal.org/node/2363155
-    if ($name != 'content_translation.settings' && !isset($this->checked[$name . ':' . $checksum])) {
+    $exceptions = array(
+      // Content translation settings cannot be provided schema yet, see
+      // https://www.drupal.org/node/2363155
+      'content_translation.settings',
+      // Following are used to test lack of or partial schema. Where partial
+      // schema is provided, that is explicitly tested in specific tests.
+      'config_schema_test.noschema',
+      'config_schema_test.someschema',
+      'config_schema_test.schema_data_types',
+      'config_schema_test.no_schema_data_types',
+      // Used to test application of schema to filtering of configuration.
+      'config_test.dynamic.system',
+    );
+    if (!in_array($name, $exceptions) && !isset($this->checked[$name . ':' . $checksum])) {
       $this->checked[$name . ':' . $checksum] = TRUE;
       $errors = $this->checkConfigSchema($this->typedManager, $name, $data);
       if ($errors === FALSE) {
diff --git a/core/modules/config/src/Tests/ConfigCRUDTest.php b/core/modules/config/src/Tests/ConfigCRUDTest.php
index 57d556a..a751997 100644
--- a/core/modules/config/src/Tests/ConfigCRUDTest.php
+++ b/core/modules/config/src/Tests/ConfigCRUDTest.php
@@ -24,11 +24,20 @@
 class ConfigCRUDTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Modules to enable.
    *
    * @var array
    */
-  public static $modules = array('system');
+  public static $modules = array('system', 'config_test');
 
   /**
    * Tests CRUD operations.
@@ -178,7 +187,7 @@ function testNameValidation() {
       $config->save();
       $this->pass($message);
     }
-    catch (\Exception $e) {
+    catch (ConfigNameException $e) {
       $this->fail($message);
     }
 
@@ -213,7 +222,6 @@ function testValueValidation() {
    * Tests data type handling.
    */
   public function testDataTypes() {
-    \Drupal::service('module_installer')->install(array('config_test'));
     $storage = new DatabaseStorage($this->container->get('database'), 'config');
     $name = 'config_test.types';
     $config = $this->container->get('config.factory')->get($name);
diff --git a/core/modules/config/src/Tests/ConfigDependencyTest.php b/core/modules/config/src/Tests/ConfigDependencyTest.php
index 88abef7..e4fcf2f 100644
--- a/core/modules/config/src/Tests/ConfigDependencyTest.php
+++ b/core/modules/config/src/Tests/ConfigDependencyTest.php
@@ -17,6 +17,15 @@
 class ConfigDependencyTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Modules to enable.
    *
    * @var array
diff --git a/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php b/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php
index 5e52cfe..dcc6341 100644
--- a/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php
+++ b/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php
@@ -11,6 +11,15 @@
  */
 class ConfigEntityNormalizeTest extends KernelTestBase {
 
+  /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
   public static $modules = array('config_test');
 
   protected function setUp() {
diff --git a/core/modules/config/src/Tests/ConfigEventsTest.php b/core/modules/config/src/Tests/ConfigEventsTest.php
index b4f7279..a967128 100644
--- a/core/modules/config/src/Tests/ConfigEventsTest.php
+++ b/core/modules/config/src/Tests/ConfigEventsTest.php
@@ -19,6 +19,15 @@
 class ConfigEventsTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Modules to enable.
    *
    * @var array
diff --git a/core/modules/config/src/Tests/ConfigFileContentTest.php b/core/modules/config/src/Tests/ConfigFileContentTest.php
index 35ca948..03cad33 100644
--- a/core/modules/config/src/Tests/ConfigFileContentTest.php
+++ b/core/modules/config/src/Tests/ConfigFileContentTest.php
@@ -16,6 +16,23 @@
  * @group config
  */
 class ConfigFileContentTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('config_test');
+
+  /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
   /**
    * Tests setting, writing, and reading of a configuration setting.
    */
diff --git a/core/modules/config/src/Tests/ConfigImportRenameValidationTest.php b/core/modules/config/src/Tests/ConfigImportRenameValidationTest.php
index ea2face..a7cae49 100644
--- a/core/modules/config/src/Tests/ConfigImportRenameValidationTest.php
+++ b/core/modules/config/src/Tests/ConfigImportRenameValidationTest.php
@@ -23,6 +23,15 @@
 class ConfigImportRenameValidationTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Config Importer object used for testing.
    *
    * @var \Drupal\Core\Config\ConfigImporter
diff --git a/core/modules/config/src/Tests/ConfigInstallTest.php b/core/modules/config/src/Tests/ConfigInstallTest.php
index 532d194..745950a 100644
--- a/core/modules/config/src/Tests/ConfigInstallTest.php
+++ b/core/modules/config/src/Tests/ConfigInstallTest.php
@@ -16,6 +16,16 @@
  * @see \Drupal\Core\Config\ConfigInstaller
  */
 class ConfigInstallTest extends KernelTestBase {
+
+  /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
   protected function setUp() {
     parent::setUp();
 
diff --git a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
index 2371a88..2246612 100644
--- a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
+++ b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
@@ -18,6 +18,15 @@
 class ConfigLanguageOverrideTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Modules to enable.
    *
    * @var array
diff --git a/core/modules/config/src/Tests/ConfigOverrideTest.php b/core/modules/config/src/Tests/ConfigOverrideTest.php
index 38ba0a1..76c8203 100644
--- a/core/modules/config/src/Tests/ConfigOverrideTest.php
+++ b/core/modules/config/src/Tests/ConfigOverrideTest.php
@@ -17,6 +17,15 @@
 class ConfigOverrideTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Modules to enable.
    *
    * @var array
diff --git a/core/modules/config/src/Tests/ConfigSchemaTest.php b/core/modules/config/src/Tests/ConfigSchemaTest.php
index 202b552..e87a984 100644
--- a/core/modules/config/src/Tests/ConfigSchemaTest.php
+++ b/core/modules/config/src/Tests/ConfigSchemaTest.php
@@ -21,6 +21,15 @@
 class ConfigSchemaTest extends KernelTestBase {
 
   /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
+  /**
    * Modules to enable.
    *
    * @var array
diff --git a/core/modules/config/src/Tests/SchemaCheckTraitTest.php b/core/modules/config/src/Tests/SchemaCheckTraitTest.php
index 450d4f1..db3be3c 100644
--- a/core/modules/config/src/Tests/SchemaCheckTraitTest.php
+++ b/core/modules/config/src/Tests/SchemaCheckTraitTest.php
@@ -17,6 +17,16 @@
  * @group config
  */
 class SchemaCheckTraitTest extends KernelTestBase {
+
+  /**
+   * Set to TRUE to strict check all configuration saved.
+   *
+   * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = TRUE;
+
   use SchemaCheckTrait;
 
   /**
diff --git a/core/modules/config/tests/config_collection_install_test/config/schema/config_collection_install_test.schema.yml b/core/modules/config/tests/config_collection_install_test/config/schema/config_collection_install_test.schema.yml
new file mode 100644
index 0000000..6e93f97
--- /dev/null
+++ b/core/modules/config/tests/config_collection_install_test/config/schema/config_collection_install_test.schema.yml
@@ -0,0 +1,7 @@
+config_collection_install_test.test:
+  type: mapping
+  label: 'Collection test'
+  mapping:
+    collection:
+      type: string
+      label: 'Collection'
diff --git a/core/modules/config/tests/config_events_test/config/schema/config_events_test.schema.yml b/core/modules/config/tests/config_events_test/config/schema/config_events_test.schema.yml
new file mode 100644
index 0000000..e3005b1
--- /dev/null
+++ b/core/modules/config/tests/config_events_test/config/schema/config_events_test.schema.yml
@@ -0,0 +1,7 @@
+config_events_test.test:
+  type: mapping
+  label: 'Configuration events test'
+  mapping:
+    key:
+      type: string
+      label: 'Value'
diff --git a/core/modules/config/tests/config_test/config/schema/config_test.schema.yml b/core/modules/config/tests/config_test/config/schema/config_test.schema.yml
index 6b375af..feff6cf 100644
--- a/core/modules/config/tests/config_test/config/schema/config_test.schema.yml
+++ b/core/modules/config/tests/config_test/config/schema/config_test.schema.yml
@@ -105,6 +105,118 @@ config_test.system:
     foo:
       type: string
       label: 'Foo'
+    baz:
+      type: string
+      label: 'Baz'
     '404':
       type: string
       label: '404'
+
+config_test.crud:
+  type: mapping
+  label: 'Configuration test'
+  mapping:
+    value:
+      type: string
+      label: 'Value'
+    '404':
+      type: string
+      label: '404'
+
+config_test.crud_rename_no_cache:
+  type: config_test.crud
+
+config_test.new:
+  type: mapping
+  label: 'Configuration test'
+  mapping:
+     key:
+       type: string
+       label: 'Test setting'
+     new_key:
+       type: string
+       label: 'Test setting'
+     uuid:
+       type: string
+       label: 'UUID'
+
+config_test.old:
+  type: config_test.new
+
+config_test.foo:
+  type: mapping
+  label: 'Configuration test'
+  mapping:
+     value:
+       type: mapping
+       label: 'Value'
+       mapping:
+         key:
+           type: string
+           label: 'Key'
+     label:
+       type: label
+       label: 'Label'
+
+config_test.bar:
+  type: config_test.foo
+
+namespace.object:
+  type: mapping
+
+foo.bar:
+  type: mapping
+  mapping:
+    foo:
+      type: string
+    biff:
+      type: mapping
+      mapping:
+        bang:
+          type: string
+    array:
+      type: mapping
+      mapping:
+        foo:
+          type: string
+        biff:
+          type: mapping
+          mapping:
+            bang:
+              type: string
+    nested:
+      type: mapping
+      mapping:
+        array:
+          type: mapping
+          mapping:
+            foo:
+              type: string
+            biff:
+              type: mapping
+              mapping:
+                bang:
+                  type: string
+    'false':
+      type: boolean
+    'true':
+      type: boolean
+    'null':
+      type: string
+    casting_array:
+      type: mapping
+      mapping:
+        cast:
+          type: mapping
+          mapping:
+            'false':
+              type: boolean
+
+foo.baz:
+  type: mapping
+  mapping:
+    foo:
+      type: string
+
+biff.bang:
+  type: foo.baz
