diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
index 596b88b6261e8add4fc0f7ed647ff57c4bf080c6..d0c833ae5ff308fe8ef58d0b342666243e8e593d 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
@@ -26,7 +26,7 @@ class BlockStorageUnitTest extends DrupalUnitTestBase {
    *
    * @var array
    */
-  public static $modules = array('block_test');
+  public static $modules = array('block', 'block_test');
 
   /**
    * The block storage controller.
@@ -46,7 +46,6 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('block'));
     $this->controller = $this->container->get('plugin.manager.entity')->getStorageController('block');
   }
 
@@ -196,7 +195,7 @@ public function testDefaultBlocks() {
     $this->assertTrue(empty($entities), 'There are no blocks initially.');
 
     // Install the block_test.module, so that its default config is installed.
-    $this->enableModules(array('block_test'));
+    $this->installConfig(array('block_test'));
 
     $entities = $this->controller->load();
     $entity = reset($entities);
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php
index a04a928cb02c2a4cc384f6237da39ad2b217a921..e363577b5a50f8b8dd514d717cfdf6eac0f0c524 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php
@@ -163,6 +163,7 @@ function testNameValidation() {
     $message = 'Expected ConfigNameException was thrown when attempting to install invalid configuration.';
     try {
       $this->enableModules(array('config_test_invalid_name'));
+      $this->installConfig(array('config_test_invalid_name'));
       $this->fail($message);
     }
     catch (ConfigNameException $e) {
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php
index 42a6fec66ff0be352c162b2969429d38dede1634..d406964fd411a88ab2b025fa9d4a2c401e9455c0 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigInstallTest.php
@@ -57,6 +57,7 @@ function testModuleInstallation() {
 
     // Install the test module.
     $this->enableModules(array('config_test'));
+    $this->installConfig(array('config_test'));
 
     // Verify that default module config exists.
     $config = config($default_config);
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php b/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
index 18d92d82583ee07eb32c8e1712a389064e986422..c3a91fbd49e17b69e11d47d650a6e63244f10cfc 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
@@ -20,7 +20,7 @@ class EditTestBase extends DrupalUnitTestBase {
    *
    * @var array
    */
-  public static $modules = array('system', 'entity', 'field_test', 'field', 'number', 'text', 'edit');
+  public static $modules = array('system', 'entity', 'field', 'field_sql_storage', 'field_test', 'number', 'text', 'edit');
 
   /**
    * Sets the default field storage backend for fields created during tests.
@@ -29,7 +29,8 @@ function setUp() {
     parent::setUp();
 
     $this->installSchema('system', 'variable');
-    $this->enableModules(array('field', 'field_sql_storage', 'field_test'));
+    $this->installSchema('field', array('field_config', 'field_config_instance'));
+    $this->installSchema('field_test', 'test_entity');
 
     // Set default storage backend.
     variable_set('field_storage_default', $this->default_storage);
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
index a8cec27070f1d92b0be755e3ae2261f5dce48368..364e4e0dd2b057cf0aec94534b8d8de22b2c98c5 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
@@ -56,6 +56,8 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
+    $this->installSchema('field_test', 'test_entity_revision');
+
     $this->editorManager = new EditorManager();
     $this->accessChecker = new MockEditEntityFieldAccessCheck();
     $this->editorSelector = new EditorSelector($this->editorManager);
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
index 6d213f632e2a56969836fe45f627ee5096420d44..3396f893d110feaf0b47db71d8c57b8a2880a0a1 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
@@ -27,7 +27,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('field'));
+    $this->installSchema('field', array('field_config', 'field_config_instance'));
   }
 
   /**
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
index fd37fb8462f059ef4905bbd4aaa1397a4a45ef4d..85b5feffc255a037169d527b83e6d57dd9eb72f9 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
@@ -14,7 +14,7 @@
  */
 class FilterDefaultConfigTest extends DrupalUnitTestBase {
 
-  public static $modules = array('system', 'user', 'filter');
+  public static $modules = array('system', 'user', 'filter', 'filter_test');
 
   public static function getInfo() {
     return array(
@@ -26,18 +26,20 @@ public static function getInfo() {
 
   function setUp() {
     parent::setUp();
-    $this->enableModules(array('user'));
+
     // filter_permission() calls into url() to output a link in the description.
     $this->installSchema('system', 'url_alias');
+
+    $this->installSchema('user', array('users_roles', 'role_permission'));
+
+    // Install filter_test module, which ships with custom default format.
+    $this->installConfig(array('user', 'filter_test'));
   }
 
   /**
    * Tests installation of default formats.
    */
   function testInstallation() {
-    // Install filter_test module, which ships with custom default format.
-    $this->enableModules(array('filter_test'));
-
     // Verify that the format was installed correctly.
     $format = filter_format_load('filter_test');
     $this->assertTrue($format);
@@ -87,9 +89,6 @@ function testInstallation() {
    * Tests that changes to FilterFormat::$roles do not have an effect.
    */
   function testUpdateRoles() {
-    // Install filter_test module, which ships with custom default format.
-    $this->enableModules(array('filter_test'));
-
     // Verify role permissions declared in default config.
     $format = filter_format_load('filter_test');
     $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array(
diff --git a/core/modules/language/lib/Drupal/language/Tests/Views/LanguageTestBase.php b/core/modules/language/lib/Drupal/language/Tests/Views/LanguageTestBase.php
index e84844b90044f14e2ff7260a9a273f1f42a14668..9057a5a88809c58833f73cdf840ca642dd522172 100644
--- a/core/modules/language/lib/Drupal/language/Tests/Views/LanguageTestBase.php
+++ b/core/modules/language/lib/Drupal/language/Tests/Views/LanguageTestBase.php
@@ -15,12 +15,22 @@
  */
 abstract class LanguageTestBase extends ViewUnitTestBase {
 
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('system', 'language');
+
   protected function setUp() {
     parent::setUp();
+    $this->installSchema('language', 'language');
+    $this->installSchema('system', 'variable');
 
-    $this->enableModules(array('system', 'language'));
 
-    // Create another language beside English.
+    // Create English and another language beside English.
+    $language = new Language(array('langcode' => 'en'));
+    language_save($language);
     $language = new Language(array('langcode' => 'xx-lolspeak', 'name' => 'Lolspeak'));
     language_save($language);
   }
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
index 4531c9f65aa10db91d6cd8131cbb71c8e69b60a4..6dbf439c64bcfc2680a3602b3972d9a4949723fe 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
@@ -61,6 +61,14 @@ abstract class DrupalUnitTestBase extends UnitTestBase {
    */
   protected $keyValueFactory;
 
+  /**
+   * Overrides \Drupal\simpletest\UnitTestBase::__construct().
+   */
+  function __construct($test_id = NULL) {
+    parent::__construct($test_id);
+    $this->skipClasses[__CLASS__] = TRUE;
+  }
+
   /**
    * Sets up Drupal unit test environment.
    *
@@ -89,7 +97,7 @@ protected function setUp() {
 
     // Bootstrap the kernel.
     // No need to dump it; this test runs in-memory.
-    $this->kernel = new DrupalKernel('testing', TRUE, drupal_classloader(), FALSE);
+    $this->kernel = new DrupalKernel('unit_testing', TRUE, drupal_classloader(), FALSE);
     $this->kernel->boot();
 
     // Collect and set a fixed module list.
@@ -97,22 +105,37 @@ protected function setUp() {
     $modules = array();
     while ($class) {
       if (property_exists($class, 'modules')) {
-        $modules = array_merge($modules, $class::$modules);
+        // Only add the modules, if the $modules property was not inherited.
+        $rp = new \ReflectionProperty($class, 'modules');
+        if ($rp->class == $class) {
+          $modules[$class] = $class::$modules;
+        }
       }
       $class = get_parent_class($class);
     }
-    $this->enableModules(array_unique($modules), FALSE);
+    // Modules have been collected in reverse class hierarchy order; modules
+    // defined by base classes should be sorted first. Then, merge the results
+    // together.
+    $modules = array_reverse($modules);
+    $modules = call_user_func_array('array_merge_recursive', $modules);
+    $this->enableModules($modules, FALSE);
+  }
+
+  protected function tearDown() {
+    $this->kernel->shutdown();
+    parent::tearDown();
   }
 
   /**
    * Sets up the base service container for this test.
    *
    * Extend this method in your test to register additional service overrides
-   * that need to persist a DrupalKernel reboot. This method is only called once
-   * for each test.
+   * that need to persist a DrupalKernel reboot. This method is called whenever
+   * the kernel is rebuilt.
    *
    * @see DrupalUnitTestBase::setUp()
    * @see DrupalUnitTestBase::enableModules()
+   * @see DrupalUnitTestBase::disableModules()
    */
   public function containerBuild($container) {
     global $conf;
@@ -137,7 +160,7 @@ public function containerBuild($container) {
       // away with a simple container holding the absolute bare minimum. When
       // a kernel is overridden then there's no need to re-register the keyvalue
       // service but when a test is happy with the superminimal container put
-      // together here, it still might a keyvalue storage for anything (for 
+      // together here, it still might a keyvalue storage for anything (for
       // eg. module_enable) using state() -- that's why a memory service was
       // added in the first place.
       $container
@@ -147,16 +170,34 @@ public function containerBuild($container) {
   }
 
   /**
-   * Installs a specific table from a module schema definition.
+   * Installs default configuration for a given list of modules.
    *
-   * Use this to install a particular table from System module.
+   * @param array $modules
+   *   A list of modules for which to install default configuration.
+   */
+  protected function installConfig(array $modules) {
+    foreach ($modules as $module) {
+      if (!$this->container->get('module_handler')->moduleExists($module)) {
+        throw new \RuntimeException(format_string("'@module' module is not enabled.", array(
+          '@module' => $module,
+        )));
+      }
+      config_install_default_config('module', $module);
+    }
+    $this->pass(format_string('Installed default config: %modules.', array(
+      '%modules' => implode(', ', $modules),
+    )));
+  }
+
+  /**
+   * Installs a specific table from a module schema definition.
    *
    * @param string $module
    *   The name of the module that defines the table's schema.
-   * @param string $table
-   *   The name of the table to install.
+   * @param string|array $tables
+   *   The name or an array of the names of the tables to install.
    */
-  protected function installSchema($module, $table) {
+  protected function installSchema($module, $tables) {
     // drupal_get_schema_unprocessed() is technically able to install a schema
     // of a non-enabled module, but its ability to load the module's .install
     // file depends on many other factors. To prevent differences in test
@@ -167,60 +208,86 @@ protected function installSchema($module, $table) {
         '@module' => $module,
       )));
     }
-    $schema = drupal_get_schema_unprocessed($module, $table);
-    if (empty($schema)) {
-      throw new \RuntimeException(format_string("Unable to retrieve '@module' module schema for '@table' table.", array(
-        '@module' => $module,
-        '@table' => $table,
-      )));
+    $tables = (array) $tables;
+    foreach ($tables as $table) {
+      $schema = drupal_get_schema_unprocessed($module, $table);
+      if (empty($schema)) {
+        throw new \RuntimeException(format_string("Unknown '@table' table schema in '@module' module.", array(
+          '@module' => $module,
+          '@table' => $table,
+        )));
+      }
+      $this->container->get('database')->schema()->createTable($table, $schema);
     }
-    Database::getConnection()->schema()->createTable($table, $schema);
     // We need to refresh the schema cache, as any call to drupal_get_schema()
     // would not know of/return the schema otherwise.
     // @todo Refactor Schema API to make this obsolete.
     drupal_get_schema(NULL, TRUE);
+    $this->pass(format_string('Installed %module tables: %tables.', array(
+      '%tables' => '{' . implode('}, {', $tables) . '}',
+      '%module' => $module,
+    )));
   }
 
   /**
    * Enables modules for this test.
    *
-   * Callbacks invoked by module_enable() may need to access information
-   * provided by info hooks of the new modules already. However, module_enable()
-   * enables the new modules in the system.module configuration only, but that
-   * has no effect, since we are operating with a fixed module list.
-   *
    * @param array $modules
    *   A list of modules to enable. Dependencies are not resolved; i.e.,
    *   multiple modules have to be specified with dependent modules first.
-   * @param bool $install
-   *   (optional) Whether to install the list of modules via module_enable().
-   *   Defaults to TRUE. If FALSE, the new modules are only added to the fixed
-   *   module list and loaded.
-   *
-   * @todo Remove $install argument and replace all callers that do not pass
-   *   FALSE with module_enable().
+   *   The new modules are only added to the active module list and loaded.
    */
-  protected function enableModules(array $modules, $install = TRUE) {
-    if ($install) {
-      module_enable($modules, FALSE);
+  protected function enableModules(array $modules) {
+    // Set the list of modules in the extension handler.
+    $module_handler = $this->container->get('module_handler');
+    $module_filenames = $module_handler->getModuleList();
+    foreach ($modules as $module) {
+      $module_filenames[$module] = drupal_get_filename('module', $module);
     }
-    // Explicitly set the list of modules in the extension handler.
-    else {
-      $module_handler = $this->container->get('module_handler');
-      $module_filenames = $module_handler->getModuleList();
-      foreach ($modules as $module) {
-        $module_filenames[$module] = drupal_get_filename('module', $module);
-      }
-      $module_handler->setModuleList($module_filenames);
-      $module_handler->resetImplementations();
-      $this->kernel->updateModules($module_filenames, $module_filenames);
+    $module_handler->setModuleList($module_filenames);
+    $module_handler->resetImplementations();
+    // Update the kernel to make their services available.
+    $this->kernel->updateModules($module_filenames, $module_filenames);
+
+    // Ensure isLoaded() is TRUE in order to make theme() work.
+    // Note that the kernel has rebuilt the container; this $module_handler is
+    // no longer the $module_handler instance from above.
+    $module_handler = $this->container->get('module_handler');
+    $module_handler->reload();
+    $this->pass(format_string('Enabled modules: %modules.', array(
+      '%modules' => implode(', ', $modules),
+    )));
+  }
+
+  /**
+   * Disables modules for this test.
+   *
+   * @param array $modules
+   *   A list of modules to disable. Dependencies are not resolved; i.e.,
+   *   multiple modules have to be specified with dependent modules first.
+   *   Code of previously active modules is still loaded. The modules are only
+   *   removed from the active module list.
+   */
+  protected function disableModules(array $modules) {
+    // Unset the list of modules in the extension handler.
+    $module_handler = $this->container->get('module_handler');
+    $module_filenames = $module_handler->getModuleList();
+    foreach ($modules as $module) {
+      unset($module_filenames[$module]);
     }
-    // Regardless of loaded or installed, ensure isLoaded() is TRUE in order to
-    // make theme() work.
+    $module_handler->setModuleList($module_filenames);
+    $module_handler->resetImplementations();
+    // Update the kernel to remove their services.
+    $this->kernel->updateModules($module_filenames, $module_filenames);
+
+    // Ensure isLoaded() is TRUE in order to make theme() work.
     // Note that the kernel has rebuilt the container; this $module_handler is
     // no longer the $module_handler instance from above.
     $module_handler = $this->container->get('module_handler');
     $module_handler->reload();
+    $this->pass(format_string('Disabled modules: %modules.', array(
+      '%modules' => implode(', ', $modules),
+    )));
   }
 
 }
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
index 242338efc533d23b336fbec22fff046372c1d4cd..3aeab60495e09976a39b607a6eee8b7baa333d9d 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
@@ -60,7 +60,7 @@ function testEnableModulesLoad() {
     $this->assertFalse(in_array($module, $list), "{$module}_permission() in module_implements() not found.");
 
     // Enable the module.
-    $this->enableModules(array($module), FALSE);
+    $this->enableModules(array($module));
 
     // Verify that the module exists.
     $this->assertTrue(module_exists($module), "$module module found.");
@@ -77,10 +77,6 @@ function testEnableModulesInstall() {
     $module = 'node';
     $table = 'node';
 
-    // @todo Remove after configuration system conversion.
-    $this->enableModules(array('system'), FALSE);
-    $this->installSchema('system', 'variable');
-
     // Verify that the module does not exist yet.
     $this->assertFalse(module_exists($module), "$module module not found.");
     $list = array_keys(drupal_container()->get('module_handler')->getModuleList());
@@ -92,8 +88,8 @@ function testEnableModulesInstall() {
     $schema = drupal_get_schema($table);
     $this->assertFalse($schema, "'$table' table schema not found.");
 
-    // Enable the module.
-    $this->enableModules(array($module));
+    // Install the module.
+    module_enable(array($module));
 
     // Verify that the enabled module exists.
     $this->assertTrue(module_exists($module), "$module module found.");
@@ -107,24 +103,6 @@ function testEnableModulesInstall() {
     $this->assertTrue($schema, "'$table' table schema found.");
   }
 
-  /**
-   * Tests installing of multiple modules via enableModules().
-   *
-   * Regression test: Each passed module has to be enabled and installed on its
-   * own, in the same way as module_enable() enables only one module after the
-   * other.
-   */
-  function testEnableModulesInstallMultiple() {
-    // Field retrieves entity type plugins, and EntityTypeManager calls into
-    // hook_entity_info_alter(). If both modules would be first enabled together
-    // instead of each on its own, then Node module's alter implementation
-    // would be called and this simply blows up. To further complicate matters,
-    // additionally install Comment module, whose entity bundles depend on node
-    // types.
-    $this->enableModules(array('field', 'node', 'comment'));
-    $this->pass('Comment module was installed.');
-  }
-
   /**
    * Tests installing modules via enableModules() with DepedencyInjection services.
    */
@@ -133,6 +111,9 @@ function testEnableModulesInstallContainer() {
     // @todo field_sql_storage and field should technically not be necessary
     //   for an entity query.
     $this->enableModules(array('field_sql_storage', 'field', 'node'));
+    $this->installSchema('field', array('field_config', 'field_config_instance'));
+
+    $this->installSchema('node', array('node_type', 'node'));
     // Perform an entity query against node.
     $query = entity_query('node');
     // Disable node access checks, since User module is not enabled.
@@ -158,6 +139,19 @@ function testInstallSchema() {
     $schema = drupal_get_schema($table);
     $this->assertTrue($schema, "'$table' table schema found.");
 
+    // Verify that a unknown table from an enabled module throws an error.
+    $table = 'unknown_entity_test_table';
+    try {
+      $this->installSchema($module, $table);
+      $this->fail('Exception for non-retrievable schema found.');
+    }
+    catch (\Exception $e) {
+      $this->pass('Exception for non-retrievable schema found.');
+    }
+    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $schema = drupal_get_schema($table);
+    $this->assertFalse($schema, "'$table' table schema not found.");
+
     // Verify that a table from a unknown module cannot be installed.
     $module = 'database_test';
     $table = 'test';
@@ -173,7 +167,7 @@ function testInstallSchema() {
     $this->assertFalse($schema, "'$table' table schema not found.");
 
     // Verify that the same table can be installed after enabling the module.
-    $this->enableModules(array($module), FALSE);
+    $this->enableModules(array($module));
     $this->installSchema($module, $table);
     $this->assertTrue(db_table_exists($table), "'$table' database table found.");
     $schema = drupal_get_schema($table);
@@ -181,7 +175,30 @@ function testInstallSchema() {
   }
 
   /**
-   * Tests that the fixed module list is retained after enabling and installing modules.
+   * Tests expected behavior of installConfig().
+   */
+  function testInstallConfig() {
+    $module = 'user';
+
+    // Verify that default config can only be installed for enabled modules.
+    try {
+      $this->installConfig(array($module));
+      $this->fail('Exception for non-enabled module found.');
+    }
+    catch (\Exception $e) {
+      $this->pass('Exception for non-enabled module found.');
+    }
+    $this->assertFalse($this->container->get('config.storage')->exists('user.settings'));
+
+    // Verify that default config can be installed.
+    $this->enableModules(array('user'));
+    $this->installConfig(array('user'));
+    $this->assertTrue($this->container->get('config.storage')->exists('user.settings'));
+    $this->assertTrue(config('user.settings')->get('register'));
+  }
+
+  /**
+   * Tests that the module list is retained after enabling/installing/disabling modules.
    */
   function testEnableModulesFixedList() {
     // entity_test is loaded via $modules; its entity type should exist.
@@ -189,7 +206,7 @@ function testEnableModulesFixedList() {
     $this->assertTrue(TRUE == entity_get_info('entity_test'));
 
     // Load some additional modules; entity_test should still exist.
-    $this->enableModules(array('entity', 'field', 'field_sql_storage', 'text', 'entity_test'), FALSE);
+    $this->enableModules(array('entity', 'field', 'field_sql_storage', 'text', 'entity_test'));
     $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE);
     $this->assertTrue(TRUE == entity_get_info('entity_test'));
 
@@ -209,7 +226,7 @@ function testEnableModulesFixedList() {
     $this->assertTrue(TRUE == entity_get_info('entity_test'));
 
     // Reactivate the disabled module without enabling it.
-    $this->enableModules(array('field_test'), FALSE);
+    $this->enableModules(array('field_test'));
 
     // Create a field and an instance.
     $display = entity_create('entity_display', array(
@@ -234,14 +251,18 @@ function testEnableModulesFixedList() {
    * Tests that theme() works right after loading a module.
    */
   function testEnableModulesTheme() {
-    $element = array(
+    $original_element = $element = array(
       '#type' => 'container',
       '#markup' => 'Foo',
       '#attributes' => array(),
     );
-    $this->enableModules(array('system'), FALSE);
+    $this->enableModules(array('system'));
     // theme() throws an exception if modules are not loaded yet.
-    drupal_render($element);
+    $this->assertTrue(drupal_render($element));
+
+    $element = $original_element;
+    $this->disableModules(array('entity_test'));
+    $this->assertTrue(drupal_render($element));
   }
 
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php
index 6d3b45875c6881276c424a7b41426acf79edd746..17d7ec0386c264845e7e3bbe5a27be29fe679572 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php
@@ -17,9 +17,19 @@
  */
 abstract class DatabaseTestBase extends DrupalUnitTestBase {
 
+  public static $modules = array('database_test');
+
   function setUp() {
     parent::setUp();
-    $this->enableModules(array('database_test'));
+    $this->installSchema('database_test', array(
+      'test',
+      'test_people',
+      'test_one_blob',
+      'test_two_blobs',
+      'test_task',
+      'test_null',
+      'test_serialized',
+    ));
     self::addSampleData();
   }
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/SelectComplexTest.php b/core/modules/system/lib/Drupal/system/Tests/Database/SelectComplexTest.php
index 5ad4faa59a4f061a11d1d3f8ca9d2cc02427d1ca..c0f181a541b3bd17916033e7ac86c3e30b1306a9 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Database/SelectComplexTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Database/SelectComplexTest.php
@@ -17,7 +17,7 @@ class SelectComplexTest extends DatabaseTestBase {
    *
    * @var array
    */
-  public static $modules = array('node_access_test');
+  public static $modules = array('node_access_test', 'field');
 
   public static function getInfo() {
     return array(
@@ -27,6 +27,11 @@ public static function getInfo() {
     );
   }
 
+  function setUp() {
+    parent::setUp();
+    $this->installSchema('field', array('field_config', 'field_config_instance'));
+  }
+
   /**
    * Tests simple JOIN statements.
    */
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUriTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUriTest.php
index 66a00e54553e9511e10c7130d9d4cba0fbb1ef1e..487fc43d11ef96113b7fa8ed0cfbbbb29a84e1f5 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUriTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUriTest.php
@@ -19,7 +19,7 @@ class EntityUriTest extends DrupalUnitTestBase {
    *
    * @var array
    */
-  public static $modules = array('field', 'field_sql_storage', 'system', 'text');
+  public static $modules = array('field', 'field_sql_storage', 'system', 'text', 'entity_test');
 
   public static function getInfo() {
     return array(
@@ -32,12 +32,9 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->installSchema('system', 'variable');
-    $this->installSchema('system', 'url_alias');
-    $this->installSchema('field', 'field_config');
-    $this->installSchema('field', 'field_config_instance');
-
-    $this->enableModules(array('entity_test'));
+    $this->installSchema('system', array('variable', 'url_alias'));
+    $this->installSchema('field', array('field_config', 'field_config_instance'));
+    $this->installSchema('entity_test', array('entity_test'));
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php
index fadce300b7694d87f7f1ac79c138e0fba792a459..525f3271fea6553503da521d10545406be808cf0 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php
@@ -16,6 +16,8 @@
  */
 class AreaTextTest extends ViewUnitTestBase {
 
+  public static $modules = array('system', 'user', 'filter');
+
   /**
    * Views used by this test.
    *
@@ -34,7 +36,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system', 'user', 'filter'));
+    $this->installConfig(array('system', 'filter'));
   }
 
   public function testAreaText() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldCounterTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldCounterTest.php
index 8c115242157259129297bf77e4bb098c513e9fbc..721b3c504d93bbe0eaebfede3fa47700d0f1487e 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldCounterTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldCounterTest.php
@@ -14,6 +14,13 @@
  */
 class FieldCounterTest extends ViewUnitTestBase {
 
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('user');
+
   /**
    * Views used by this test.
    *
@@ -31,8 +38,7 @@ public static function getInfo() {
 
   protected function setUp() {
     parent::setUp();
-
-    $this->enableModules(array('user'));
+    $this->installSchema('user', 'role_permission');
   }
 
   function testSimple() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php
index 450fee802daa80cd282326e1e9e0ffe8d2fa4671..afff1b33d08199f46f1dd61fa4115fa3b56f20ef 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php
@@ -17,6 +17,8 @@
  */
 class FieldUnitTest extends ViewUnitTestBase {
 
+  public static $modules = array('user');
+
   /**
    * Views used by this test.
    *
@@ -36,10 +38,9 @@ public static function getInfo() {
     );
   }
 
-  protected function setUp() {
+  public function setUp() {
     parent::setUp();
-
-    $this->enableModules(array('user'));
+    $this->installSchema('user', 'role_permission');
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUrlTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUrlTest.php
index 1deac88c7f5a7edad1c87733ee0a99767b027452..75e638e96c1021720906d612a530dd62900a69e7 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUrlTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUrlTest.php
@@ -14,6 +14,8 @@
  */
 class FieldUrlTest extends ViewUnitTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -29,9 +31,9 @@ public static function getInfo() {
     );
   }
 
-  public function setup() {
-    parent::setup();
-    $this->enableModules(array('system'));
+  public function setUp() {
+    parent::setUp();
+    $this->installSchema('system', 'url_alias');
   }
 
   function viewsData() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php
index a93cbe128ae11dbc5a2ad16a4e1947950d1f2b88..f0f4814a96091d67269ce716f6d808f4e775a5b3 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php
@@ -14,6 +14,8 @@
  */
 class FilterEqualityTest extends ViewUnitTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -36,8 +38,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system'));
-    $this->enableModules(array('menu_link'));
+    $this->installSchema('system', array('menu_router', 'variable'));
   }
 
   function viewsData() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php
index 6b74ddd738ef26d8ecb52be8ec41e5dabbd90c69..fb154c15a88df05a89897a456e1354153c44a2db 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php
@@ -14,6 +14,8 @@
  */
 class FilterInOperatorTest extends ViewUnitTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -37,8 +39,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system'));
-    $this->enableModules(array('menu_link'));
+    $this->installSchema('system', array('menu_router', 'variable'));
   }
 
   function viewsData() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterNumericTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterNumericTest.php
index d0235546073fb96f84476e77c73c86c7875b1008..e12c94ab8aa8543c92169eb3285d9ca730aa8477 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterNumericTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterNumericTest.php
@@ -14,6 +14,8 @@
  */
 class FilterNumericTest extends ViewUnitTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -37,8 +39,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system'));
-    $this->enableModules(array('menu_link'));
+    $this->installSchema('system', array('menu_router', 'variable'));
   }
 
   function viewsData() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterStringTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterStringTest.php
index c5f27f60a2d322761d396ae8643df8010f026e06..57489bb293ec3091cd7a95a8dcd39c3b0a017b94 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FilterStringTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FilterStringTest.php
@@ -14,6 +14,8 @@
  */
 class FilterStringTest extends ViewUnitTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -36,8 +38,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system'));
-    $this->enableModules(array('menu_link'));
+    $this->installSchema('system', array('menu_router', 'variable'));
   }
 
   function viewsData() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAliasTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAliasTest.php
index 793f2d8e956bdcbe76d9f5394d18f66192482991..a120aad0e4804a114a6a418a95feff9e762c7510 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAliasTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerAliasTest.php
@@ -14,6 +14,8 @@
  */
 class HandlerAliasTest extends ViewUnitTestBase {
 
+  public static $modules = array('user');
+
   /**
    * Views used by this test.
    *
@@ -32,7 +34,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('user'));
+    $this->installSchema('user', 'users');
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php b/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php
index dacdbabe28856bb185f85d5325fab664e1eaff07..374de36d54c1b734324872e84ed39660a2a3329b 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php
@@ -60,7 +60,7 @@ function testviews_get_handler() {
    * Tests the load wrapper/helper functions.
    */
   public function testLoadFunctions() {
-    $this->enableModules(array('node'), FALSE);
+    $this->enableModules(array('node'));
     $controller = $this->container->get('plugin.manager.entity')->getStorageController('view');
 
     // Test views_view_is_enabled/disabled.
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/PluginUnitTestBase.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/PluginUnitTestBase.php
new file mode 100644
index 0000000000000000000000000000000000000000..96ebcda4b7b0cf5f6eeb26b999db48e6bf359849
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/PluginUnitTestBase.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\Plugin\PluginUnitTestBase.
+ */
+
+namespace Drupal\views\Tests\Plugin;
+
+use Drupal\views\Tests\ViewUnitTestBase;
+
+/**
+ * Base test class for views plugin unit tests.
+ */
+abstract class PluginUnitTestBase extends ViewUnitTestBase {
+
+}
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php
index 63a9f230f212f4b87cc9cd3bc5874ee64399fa32..5d2b524d92395d6ec30348f3c9f3e6df7cf4d660 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php
@@ -13,19 +13,28 @@
  * @see \Drupal\views\Tests\Handler\JoinTest
  * @see \Drupal\views\Tests\Plugin\RelationshipTest
  */
-abstract class RelationshipJoinTestBase extends PluginTestBase {
+abstract class RelationshipJoinTestBase extends PluginUnitTestBase {
 
   /**
    * Modules to enable.
    *
    * @var array
    */
-  public static $modules = array('user');
+  public static $modules = array('system', 'user', 'field');
 
-  protected function setUp() {
-    parent::setUp();
+  /**
+   * Overrides \Drupal\views\Tests\ViewUnitTestBase::setUpFixtures().
+   */
+  protected function setUpFixtures() {
+    $this->installSchema('user', array('users', 'users_roles', 'role_permission'));
+    $this->installSchema('field', array('field_config', 'field_config_instance'));
+    $this->installConfig(array('user'));
+    parent::setUpFixtures();
 
-    $this->enableViewsTestModule();
+    // Create a record for uid 1.
+    $this->installSchema('system', 'sequences');
+    $this->root_user = entity_create('user', array('name' => $this->randomName()));
+    $this->root_user->save();
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php
index 0ecc5331baf7d4a2108b656449fde754931d1f51..f745a08e29356133b3ba39869ebec3b094f956fc 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php
@@ -12,6 +12,8 @@
  */
 class StyleMappingTest extends StyleTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -27,12 +29,6 @@ public static function getInfo() {
     );
   }
 
-  public function setUp() {
-    parent::setUp();
-
-    $this->enableModules(array('system'));
-  }
-
   /**
    * Verifies that the fields were mapped correctly.
    */
diff --git a/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php b/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php
index 632504fc351538f9b3e169b5a196f967092a9c1f..f795818f43efd24eb9d5a48bdde7155b3bf34e37 100644
--- a/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php
@@ -12,6 +12,8 @@
  */
 class TokenReplaceTest extends ViewUnitTestBase {
 
+  public static $modules = array('system');
+
   /**
    * Views used by this test.
    *
@@ -27,10 +29,9 @@ public static function getInfo() {
     );
   }
 
-  public function setUp() {
+  function setUp() {
     parent::setUp();
-
-    $this->enableModules(array('system'));
+    $this->installSchema('system', 'url_alias');
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
index ea3a87cf6d1387014ecead832cd9e1a113eb404e..7afe70102faeccc809046a7ab60690b972be4f57 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
@@ -23,6 +23,8 @@
  */
 class ViewExecutableTest extends ViewUnitTestBase {
 
+  public static $modules = array('system', 'node', 'comment', 'user', 'filter');
+
   /**
    * Views used by this test.
    *
@@ -75,10 +77,13 @@ public static function getInfo() {
     );
   }
 
-  protected function setUp() {
-    parent::setUp();
+  protected function setUpFixtures() {
+    $this->installSchema('user', array('users', 'role_permission'));
+    $this->installSchema('node', array('node_type', 'node'));
+    $this->installSchema('comment', array('comment', 'node_comment_statistics'));
+    parent::setUpFixtures();
 
-    $this->enableModules(array('system', 'node', 'comment', 'user', 'filter'));
+    $this->installConfig(array('filter'));
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php
index 91f7b31228dd5c52bcf7845d2bcd9b892a1f2832..8336c758d34c13f750a117ea3c662c6272c9a5ae 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php
@@ -192,6 +192,7 @@ protected function displayTests() {
   protected function displayMethodTests() {
     // Enable the system module so l() can work using url_alias table.
     $this->enableModules(array('system'));
+    $this->installSchema('system', 'url_alias');
 
     $config['display'] = array(
       'page_1' => array(
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php b/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php
index 334b5dadcc08f5ef077477b5646945a14c71316f..80b659cdfa76a145457a868c431bcba6d6197b96 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewUnitTestBase.php
@@ -24,14 +24,34 @@
  */
 abstract class ViewUnitTestBase extends DrupalUnitTestBase {
 
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('views', 'views_test_config', 'views_test_data');
+
   protected function setUp() {
     parent::setUp();
 
+    $this->setUpFixtures();
+  }
+
+  /**
+   * Sets up the configuration and schema of views and views_test_data modules.
+   *
+   * Because the schema of views_test_data.module is dependent on the test
+   * using it, it cannot be enabled normally.
+   */
+  protected function setUpFixtures() {
     // Define the schema and views data variable before enabling the test module.
     state()->set('views_test_data_schema', $this->schemaDefinition());
     state()->set('views_test_data_views_data', $this->viewsData());
 
-    $this->enableModules(array('views', 'views_test_config', 'views_test_data'));
+    $this->installConfig(array('views', 'views_test_config', 'views_test_data'));
+    foreach ($this->schemaDefinition() as $table => $schema) {
+      $this->installSchema('views_test_data', $table);
+    }
 
     // Load the test dataset.
     $data_set = $this->dataSet();
@@ -66,8 +86,8 @@ protected function setUp() {
    * @return bool
    *   TRUE if the assertion succeeded, or FALSE otherwise.
    */
-  protected function assertIdenticalResultset($view, $expected_result, $column_map = array(), $message = 'Identical result set') {
-    return $this->assertIdenticalResultsetHelper($view, $expected_result, $column_map, $message, 'assertIdentical');
+  protected function assertIdenticalResultset($view, $expected_result, $column_map = array(), $message = NULL) {
+    return $this->assertIdenticalResultsetHelper($view, $expected_result, $column_map, 'assertIdentical', $message);
   }
 
   /**
@@ -89,8 +109,8 @@ protected function assertIdenticalResultset($view, $expected_result, $column_map
    * @return bool
    *   TRUE if the assertion succeeded, or FALSE otherwise.
    */
-  protected function assertNotIdenticalResultset($view, $expected_result, $column_map = array(), $message = 'Identical result set') {
-    return $this->assertIdenticalResultsetHelper($view, $expected_result, $column_map, $message, 'assertNotIdentical');
+  protected function assertNotIdenticalResultset($view, $expected_result, $column_map = array(), $message = NULL) {
+    return $this->assertIdenticalResultsetHelper($view, $expected_result, $column_map, 'assertNotIdentical', $message);
   }
 
   /**
@@ -106,11 +126,11 @@ protected function assertNotIdenticalResultset($view, $expected_result, $column_
    * @param array $column_map
    *   An associative array mapping the columns of the result set
    *   from the view (as keys) and the expected result set (as values).
-   * @param string $message
-   *   The message to display with the assertion.
    * @param string $assert_method
    *   The TestBase assertion method to use (either 'assertIdentical' or
    *   'assertNotIdentical').
+   * @param string $message
+   *   (optional) The message to display with the assertion.
    *
    * @return bool
    *   TRUE if the assertion succeeded, or FALSE otherwise.
@@ -118,7 +138,7 @@ protected function assertNotIdenticalResultset($view, $expected_result, $column_
    * @see \Drupal\views\Tests\ViewTestBase::assertIdenticalResultset()
    * @see \Drupal\views\Tests\ViewTestBase::assertNotIdenticalResultset()
    */
-  protected function assertIdenticalResultsetHelper($view, $expected_result, $column_map, $message, $assert_method) {
+  protected function assertIdenticalResultsetHelper($view, $expected_result, $column_map, $assert_method, $message = NULL) {
     // Convert $view->result to an array of arrays.
     $result = array();
     foreach ($view->result as $key => $value) {
@@ -140,13 +160,24 @@ protected function assertIdenticalResultsetHelper($view, $expected_result, $colu
       $expected_result[$key] = $row;
     }
 
+    $this->verbose('<pre style="white-space: pre-wrap;">'
+      . "\n\nQuery:\n" . $view->build_info['query']
+      . "\n\nQuery arguments:\n" . var_export($view->build_info['query_args'], TRUE)
+      . "\n\nActual result:\n" . var_export($result, TRUE)
+      . "\n\nExpected result:\n" . var_export($expected_result, TRUE));
+
     // Reset the numbering of the arrays.
     $result = array_values($result);
     $expected_result = array_values($expected_result);
 
-    $this->verbose('<pre>Returned data set: ' . print_r($result, TRUE) . "\n\nExpected: ". print_r($expected_result, TRUE));
-
     // Do the actual comparison.
+    if (!isset($message)) {
+      $not = (strpos($assert_method, 'Not') ? 'not' : '');
+      $message = format_string("Actual result <pre>\n@actual\n</pre> is $not identical to expected <pre>\n@expected\n</pre>", array(
+        '@actual' => var_export($result, TRUE),
+        '@expected' => var_export($expected_result, TRUE),
+      ));
+    }
     return $this->$assert_method($result, $expected_result, $message);
   }
 
@@ -188,7 +219,6 @@ protected function executeView($view, $args = array()) {
     $view->setDisplay();
     $view->preExecute($args);
     $view->execute();
-    $this->verbose('<pre>Executed view: ' . ((string) $view->build_info['query']) . '</pre>');
   }
 
   /**