diff --git a/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php b/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php
index 2d9fb09..1606c01 100644
--- a/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php
+++ b/core/modules/hal/lib/Drupal/hal/Tests/DenormalizeTest.php
@@ -22,6 +22,12 @@ public static function getInfo() {
     );
   }
 
+  public function setUp() {
+    parent::setUp();
+    $this->enableLanguage();
+    $this->createTranslatableTextField();
+  }
+
   /**
    * Tests that the type link relation in incoming data is handled correctly.
    */
@@ -30,7 +36,7 @@ public function testTypeHandling() {
     $data_with_valid_type = array(
       '_links' => array(
         'type' => array(
-          'href' => url('rest/type/entity_test/entity_test', array('absolute' => TRUE)),
+          'href' => url('rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE)),
         ),
       ),
     );
@@ -45,7 +51,7 @@ public function testTypeHandling() {
             'href' => url('rest/types/foo', array('absolute' => TRUE)),
           ),
           array(
-            'href' => url('rest/type/entity_test/entity_test', array('absolute' => TRUE)),
+            'href' => url('rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE)),
           ),
         ),
       ),
@@ -90,7 +96,7 @@ public function testMarkFieldForDeletion() {
     $no_field_data = array(
       '_links' => array(
         'type' => array(
-          'href' => url('rest/type/entity_test/entity_test', array('absolute' => TRUE)),
+          'href' => url('rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE)),
         ),
       ),
     );
@@ -100,7 +106,7 @@ public function testMarkFieldForDeletion() {
     $empty_field_data = array(
       '_links' => array(
         'type' => array(
-          'href' => url('rest/type/entity_test/entity_test', array('absolute' => TRUE)),
+          'href' => url('rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE)),
         ),
       ),
       'field_test_text' => array(),
@@ -118,7 +124,7 @@ public function testBasicFieldDenormalization() {
     $data = array(
       '_links' => array(
         'type' => array(
-          'href' => url('rest/type/entity_test/entity_test', array('absolute' => TRUE)),
+          'href' => url('rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE)),
         ),
       ),
       'uuid' => array(
diff --git a/core/modules/hal/lib/Drupal/hal/Tests/NormalizeTest.php b/core/modules/hal/lib/Drupal/hal/Tests/NormalizeTest.php
index eb577e5..f7b6843 100644
--- a/core/modules/hal/lib/Drupal/hal/Tests/NormalizeTest.php
+++ b/core/modules/hal/lib/Drupal/hal/Tests/NormalizeTest.php
@@ -20,13 +20,19 @@ public static function getInfo() {
     );
   }
 
+  public function setUp() {
+    parent::setUp();
+    $this->enableLanguage();
+    $this->createTranslatableTextField();
+  }
+
   /**
    * Tests the normalize function.
    */
   public function testNormalize() {
-    $target_entity_de = entity_create('entity_test', (array('langcode' => 'de', 'field_test_entity_reference' => NULL)));
+    $target_entity_de = entity_create('entity_test_mulrev', (array('langcode' => 'de', 'name' => '', 'field_test_entity_reference' => NULL)));
     $target_entity_de->save();
-    $target_entity_en = entity_create('entity_test', (array('langcode' => 'en', 'field_test_entity_reference' => NULL)));
+    $target_entity_en = entity_create('entity_test_mulrev', (array('langcode' => 'en', 'name' => '', 'field_test_entity_reference' => NULL)));
     $target_entity_en->save();
 
     // Create a German entity.
@@ -50,15 +56,15 @@ public function testNormalize() {
       )
     );
 
-    $entity = entity_create('entity_test', $values);
+    $entity = entity_create('entity_test_mulrev', $values);
     $entity->save();
     // Add an English value for name and entity reference properties.
     $entity->getTranslation('en')->set('name', array(0 => array('value' => $translation_values['name'])));
     $entity->getTranslation('en')->set('field_test_entity_reference', array(0 => $translation_values['field_test_entity_reference']));
     $entity->save();
 
-    $type_uri = url('rest/type/entity_test/entity_test', array('absolute' => TRUE));
-    $relation_uri = url('rest/relation/entity_test/entity_test/field_test_entity_reference', array('absolute' => TRUE));
+    $type_uri = url('rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE));
+    $relation_uri = url('rest/relation/entity_test_mulrev/entity_test_mulrev/field_test_entity_reference', array('absolute' => TRUE));
 
     $expected_array = array(
       '_links' => array(
diff --git a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
index 2d73a24..3aa64b1 100644
--- a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
+++ b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
@@ -17,27 +17,19 @@
 use Drupal\rest\LinkManager\LinkManager;
 use Drupal\rest\LinkManager\RelationLinkManager;
 use Drupal\rest\LinkManager\TypeLinkManager;
-use Drupal\simpletest\DrupalUnitTestBase;
-use Symfony\Component\Serializer\Serializer;
+use Drupal\serialization\Tests\NormalizerTestBase as SerializationNormalizerTestBase;
 
 /**
  * Test the HAL normalizer.
  */
-abstract class NormalizerTestBase extends DrupalUnitTestBase {
+abstract class NormalizerTestBase extends SerializationNormalizerTestBase {
 
   /**
    * Modules to enable.
    *
    * @var array
    */
-  public static $modules = array('entity', 'entity_test', 'entity_reference', 'field', 'field_sql_storage', 'hal', 'language', 'rest', 'serialization', 'system', 'text', 'user');
-
-  /**
-   * The mock serializer.
-   *
-   * @var \Symfony\Component\Serializer\Serializer
-   */
-  protected $serializer;
+  public static $modules = array('entity', 'entity_test', 'entity_reference', 'field', 'field_sql_storage', 'hal', 'rest', 'serialization', 'system', 'text', 'user');
 
   /**
    * The format being tested.
@@ -51,46 +43,75 @@
    *
    * @var string
    */
-  protected $entityClass = 'Drupal\entity_test\Plugin\Core\Entity\EntityTest';
+  protected $entityClass = 'Drupal\entity_test\Plugin\Core\Entity\EntityTestMulRev';
 
   /**
    * Overrides \Drupal\simpletest\DrupalUnitTestBase::setup().
    */
   function setUp() {
     parent::setUp();
-    $this->installSchema('system', array('variable', 'url_alias'));
-    $this->installSchema('user', array('users'));
-    $this->installSchema('language', array('language'));
-    $this->installSchema('entity_test', array('entity_test'));
-    $this->installConfig(array('field'));
+    $this->installSchema('user', array('users', 'role_permission'));
+
+    $this->createEntityReferenceField();
+
+    // Set up the mock serializer.
+    $normalizers = array(
+      new EntityReferenceItemNormalizer(),
+      new FieldItemNormalizer(),
+      new FieldNormalizer(),
+      new EntityNormalizer(),
+    );
+    $encoders = array(
+      new JsonEncoder(),
+    );
+    $this->serializer = $this->getMockSerializer($normalizers, $encoders);
+  }
 
+  /**
+   * Creates a mock serializer for testing.
+   *
+   * @param $normalizers
+   *   The array of normalizers to instantiate the serializer with.
+   * @param $encoders
+   *   The array of encoders to instantiate the serializer with.
+   *
+   * @return \Symfony\Component\Serializer\Serializer
+   *   The mock serializer.
+   */
+  protected function getMockSerializer($normalizers, $encoders) {
+    $link_manager = new LinkManager(new TypeLinkManager(new MemoryBackend('cache')), new RelationLinkManager(new MemoryBackend('cache')));
+    foreach ($normalizers as $normalizer) {
+      if (method_exists($normalizer, 'setLinkManager')) {
+        $normalizer->setLinkManager($link_manager);
+      }
+    }
+    return parent::getMockSerializer($normalizers, $encoders);
+  }
+
+  /**
+   * Enable multiple languages for testing.
+   */
+  protected function enableLanguage() {
+    $this->enableModules(array('language'));
+    $this->installSchema('language', array('language'));
     // Add English as a language.
     $english = new Language(array(
-      'langcode' => 'en',
-      'name' => 'English',
+    'langcode' => 'en',
+    'name' => 'English',
     ));
     language_save($english);
     // Add German as a language.
     $german = new Language(array(
-      'langcode' => 'de',
-      'name' => 'Deutsch',
+    'langcode' => 'de',
+    'name' => 'Deutsch',
     ));
     language_save($german);
+  }
 
-    // Create the test text field.
-    $field = array(
-      'field_name' => 'field_test_text',
-      'type' => 'text',
-      'translatable' => FALSE,
-    );
-    field_create_field($field);
-    $instance = array(
-      'entity_type' => 'entity_test',
-      'field_name' => 'field_test_text',
-      'bundle' => 'entity_test',
-    );
-    field_create_instance($instance);
-
+  /**
+   * Create a translatable text field for testing.
+   */
+  protected function createTranslatableTextField() {
     // Create the test translatable field.
     $field = array(
       'field_name' => 'field_test_translatable_text',
@@ -99,44 +120,32 @@ function setUp() {
     );
     field_create_field($field);
     $instance = array(
-      'entity_type' => 'entity_test',
+      'entity_type' => 'entity_test_mulrev',
       'field_name' => 'field_test_translatable_text',
-      'bundle' => 'entity_test',
+      'bundle' => 'entity_test_mulrev',
     );
     field_create_instance($instance);
+  }
 
+  /**
+   * Create an entity reference field for testing.
+   */
+  protected function createEntityReferenceField() {
     // Create the test entity reference field.
     $field = array(
       'translatable' => TRUE,
       'settings' => array(
-        'target_type' => 'entity_test',
+        'target_type' => 'entity_test_mulrev',
       ),
       'field_name' => 'field_test_entity_reference',
       'type' => 'entity_reference',
     );
     field_create_field($field);
     $instance = array(
-      'entity_type' => 'entity_test',
+      'entity_type' => 'entity_test_mulrev',
       'field_name' => 'field_test_entity_reference',
-      'bundle' => 'entity_test',
+      'bundle' => 'entity_test_mulrev',
     );
     field_create_instance($instance);
-
-    // Set up the mock serializer.
-    $normalizers = array(
-      new EntityNormalizer(),
-      new EntityReferenceItemNormalizer(),
-      new FieldItemNormalizer(),
-      new FieldNormalizer(),
-    );
-    $link_manager = new LinkManager(new TypeLinkManager(new MemoryBackend('cache')), new RelationLinkManager(new MemoryBackend('cache')));
-    foreach ($normalizers as $normalizer) {
-      $normalizer->setLinkManager($link_manager);
-    }
-    $encoders = array(
-      new JsonEncoder(),
-    );
-    $this->serializer = new Serializer($normalizers, $encoders);
   }
-
 }
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/Entity/UserNormalizationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/Entity/UserNormalizationTest.php
new file mode 100644
index 0000000..98f135a
--- /dev/null
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/Entity/UserNormalizationTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\serialization\Tests\Entity\UserNormalizationTest.
+ */
+
+namespace Drupal\serialization\Tests\Entity;
+
+use Drupal\serialization\Tests\NormalizerTestBase;
+
+class UserNormalizationTest extends NormalizerTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('user');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'User Normalize Test',
+      'description' => 'Test that user entities can be normalized.',
+      'group' => 'Serialization',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->installSchema('system', array('sequences'));
+    $this->installSchema('user', array('users'));
+  }
+
+  /**
+   * Tests that users can be normalized.
+   */
+  public function testNormalize() {
+    $user = entity_create('user', array('name' => $this->randomName()));
+    $user->save();
+    $normalized = $this->serializer->normalize($user, 'json');
+
+    $expected = array(
+      'uid' => array(
+        array('value' => $user->get('uid')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'uuid' => array(
+        array('value' => $user->get('uuid')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'langcode' => array(
+        array('value' => $user->get('langcode')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'preferred_langcode' => array(
+        array('value' => $user->get('preferred_langcode')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'preferred_admin_langcode' => array(
+        array('value' => $user->get('preferred_admin_langcode')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'name' => array(
+        array('value' => $user->get('name')->offsetGet(0)->get('value')->getValue()),
+      ),
+      // The serialization module doesn't do any access checking, so the
+      // password field is exposed if the calling function does not run access
+      // checks before calling serialize.
+      'pass' => array(
+        array('value' => $user->get('pass')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'mail' => array(
+        array('value' => $user->get('mail')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'signature' => array(
+        array('value' => $user->get('signature')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'signature_format' => array(
+        array('value' => $user->get('signature_format')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'theme' => array(
+        array('value' => $user->get('theme')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'timezone' => array(
+        array('value' => $user->get('timezone')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'status' => array(
+        array('value' => $user->get('status')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'created' => array(
+        array('value' => $user->get('created')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'access' => array(
+        array('value' => $user->get('access')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'login' => array(
+        array('value' => $user->get('login')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'init' => array(
+        array('value' => $user->get('init')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'roles' => array(
+        array('value' => $user->get('roles')->offsetGet(0)->get('value')->getValue()),
+      ),
+    );
+
+    $this->assertEqual($expected, $normalized, 'User entity is normalized correctly.');
+  }
+}
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php
index dfbb7ba..09336d5 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/EntityResolverTest.php
@@ -6,7 +6,11 @@
 
 namespace Drupal\serialization\Tests;
 
-class EntityResolverTest extends NormalizerTestBase {
+use Drupal\hal\Tests\NormalizerTestBase as HalNormalizerTestBase;
+use Drupal\serialization\EntityResolver\ChainEntityResolver;
+use Drupal\serialization\EntityResolver\UuidResolver;
+
+class EntityResolverTest extends HalNormalizerTestBase {
 
   /**
    * Modules to enable.
@@ -30,35 +34,13 @@ public static function getInfo() {
     );
   }
 
-  protected function setUp() {
-    parent::setUp();
-
-    // Create the test field.
-    $field = array(
-      'settings' => array(
-        'target_type' => 'entity_test_mulrev',
-      ),
-      'field_name' => 'field_test_entity_reference',
-      'type' => 'entity_reference',
-    );
-    field_create_field($field);
-
-    // Create the test field instance.
-    $instance = array(
-      'entity_type' => 'entity_test_mulrev',
-      'field_name' => 'field_test_entity_reference',
-      'bundle' => 'entity_test_mulrev',
-    );
-    field_create_instance($instance);
-  }
-
   /**
    * Test that fields referencing UUIDs can be denormalized.
    */
   function testUuidEntityResolver() {
     // Create an entity to get the UUID from.
     $entity = entity_create('entity_test_mulrev', array('type' => 'entity_test_mulrev'));
-    $entity->set('name', 'foobar');
+    $entity->set('name', array(array('value' => 'foobar')));
     $entity->set('field_test_entity_reference', array(array('target_id' => 1)));
     $entity->save();
 
@@ -91,9 +73,24 @@ function testUuidEntityResolver() {
       ),
     );
 
-    $denormalized = $this->container->get('serializer')->denormalize($data, 'Drupal\entity_test\Plugin\Core\Entity\EntityTestMulRev', $this->format);
+    $denormalized = $this->serializer->denormalize($data, 'Drupal\entity_test\Plugin\Core\Entity\EntityTestMulRev', $this->format);
     $field_value = $denormalized->get('field_test_entity_reference')->getValue();
     $this->assertEqual($field_value[0]['target_id'], 1, 'Entity reference resolved using UUID.');
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function getMockSerializer($normalizers, $encoders) {
+    $resolver = new ChainEntityResolver(array(new UuidResolver()));
+    foreach ($normalizers as $normalizer) {
+      // There is no EntityResolverAwareInterface because the method is only
+      // called from services.yml. Instead, do a method_exists to check which
+      // Normalizers should have it injected.
+      if (method_exists($normalizer, 'setEntityResolver')) {
+        $normalizer->setEntityResolver($resolver);
+      }
+    }
+    return parent::getMockSerializer($normalizers, $encoders);
+  }
 }
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
index 46ad0cc..63c36ff 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
@@ -63,7 +63,7 @@ protected function setUp() {
     $this->entity = entity_create('entity_test_mulrev', $this->values);
     $this->entity->save();
 
-    $this->serializer = $this->container->get('serializer');
+    $this->serializer = $this->serializer;
 
     $this->installConfig(array('field'));
   }
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php b/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php
index 1d9bff6..298da3c 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/NormalizerTestBase.php
@@ -7,7 +7,13 @@
 
 namespace Drupal\serialization\Tests;
 
+use Drupal\serialization\Encoder\JsonEncoder;
+use Drupal\serialization\Encoder\XmlEncoder;
+use Drupal\serialization\Normalizer\ComplexDataNormalizer;
+use Drupal\serialization\Normalizer\ListNormalizer;
+use Drupal\serialization\Normalizer\TypedDataNormalizer;
 use Drupal\simpletest\DrupalUnitTestBase;
+use Symfony\Component\Serializer\Serializer;
 
 abstract class NormalizerTestBase extends DrupalUnitTestBase {
 
@@ -18,13 +24,46 @@
    */
   public static $modules = array('serialization', 'system', 'entity', 'field', 'entity_test', 'text', 'field_sql_storage');
 
+  /**
+   * The mock serializer.
+   *
+   * @var \Symfony\Component\Serializer\Serializer
+   */
+  protected $serializer;
+
   protected function setUp() {
     parent::setUp();
 
     $this->installSchema('entity_test', array('entity_test_mulrev', 'entity_test_mulrev_property_revision', 'entity_test_mulrev_property_data'));
-    $this->installSchema('system', array('url_alias'));
+    $this->installSchema('system', array('url_alias', 'variable'));
     $this->installConfig(array('field'));
 
+    $this->createTextField();
+
+    // Set up mock Serializer.
+    $normalizers = array(
+      new ComplexDataNormalizer(),
+      new ListNormalizer(),
+      new TypedDataNormalizer(),
+    );
+    $encoders = array(
+      new JsonEncoder(),
+      new XmlEncoder(),
+    );
+    $this->serializer = $this->getMockSerializer($normalizers, $encoders);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getMockSerializer($normalizers, $encoders) {
+    return new Serializer($normalizers, $encoders);
+  }
+
+  /**
+   * Create a text field for testing.
+   */
+  protected function createTextField() {
     // Auto-create a field for testing.
     field_create_field(array(
       'field_name' => 'field_test_text',
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php
index e0c62cd..cd16f19 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php
@@ -10,6 +10,9 @@
 use Drupal\simpletest\WebTestBase;
 use Symfony\Component\Serializer\Exception\UnexpectedValueException;
 
+/**
+ * Functional test to test registration with Serializer.
+ */
 class SerializationTest extends WebTestBase {
 
   /**
@@ -36,7 +39,7 @@ public static function getInfo() {
 
   protected function setUp() {
     parent::setUp();
-    $this->serializer = drupal_container()->get('serializer');
+    $this->serializer = $this->container->get('serializer');
   }
 
   /**
