diff --git a/node_display_title.info b/node_display_title.info
index 06e7694..10c183d 100755
--- a/node_display_title.info
+++ b/node_display_title.info
@@ -3,4 +3,5 @@ description = Create separate admin and display titles for a node.
 core = 7.x
 dependencies[] = field
 files[] = node_display_title.module
+files[] = node_display_title.test
 configure = admin/config/content/node_display_title
diff --git a/node_display_title.test b/node_display_title.test
new file mode 100644
index 0000000..ec19cce
--- /dev/null
+++ b/node_display_title.test
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * @file
+ * Test class for Node Display Title module.
+ */
+
+/**
+ * Test that module creates field and allows values to be set correctly.
+ */
+class NodeDisplayTitleTestCase extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Node Display Title Tests',
+      'description' => 'Ensures the module functions as designed',
+      'group' => 'Node',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    $this->public_files_directory = variable_get('file_public_path');
+
+    parent::setup(array('node_display_title'));
+
+    // Create an admin user and log in.
+    $this->drupalLogin(
+      $this->drupalCreateUser(array('bypass node access', 'administer nodes'))
+    );
+
+    // Enable title on article.
+    $field_name = 'field_node_display_title';
+    $type = 'page';
+
+    // Get weight of title.
+    $field_instances_by_node_type = field_info_instances('node');
+    $instance = $field_instances_by_node_type[$type];
+    $extra_fields = field_info_extra_fields('node', $type, 'form');
+    $title_field_weight = $extra_fields['title']['weight'];
+
+    // Move all fields below title down one position.
+    // Define field instance options.
+    $instance_options = array(
+      'field_name' => $field_name,
+      'entity_type' => 'node',
+      'bundle' => $type,
+      'label' => t('Display title'),
+      'widget' => array(
+        // Position new field directly below title field.
+        'weight' => ++$title_field_weight,
+      ),
+      'display' => array(
+        'default' => array(
+          'type' => 'hidden',
+        ),
+      ),
+    );
+
+    $node_display_title_settings[] = $type;
+
+    // Add field instance if not already present for given node type.
+    if (!isset($instance['field_node_display_title'])) {
+      field_create_instance($instance_options);
+    }
+  }
+
+  /**
+   * Creates page and test values.
+   */
+  public function testNodeDisplayTitleCreate() {
+    // Create a web user and log in.
+    $this->drupalLogin(
+      $this->drupalCreateUser(array('create page content', 'edit own page content'))
+    );
+
+    $edit = array();
+    $edit["title"] = $this->randomName(8);
+    $edit["body[und][0][value]"] = $this->randomName(16);
+    $edit["field_node_display_title[und][0][value]"] = $this->randomName(8);
+
+    $this->drupalPost('node/add/page', $edit, t('Save'));
+
+    $this->assertRaw(t('!post %title has been created.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Basic page created.');
+
+    $node = $this->drupalGetNodeByTitle($edit["title"]);
+
+    $this->assertTrue($node, 'Node found in database.');
+    $this->assertEqual($node->field_node_display_title[LANGUAGE_NONE][0]['value'], $edit["field_node_display_title[und][0][value]"]);
+
+    $this->clickLink(t('Edit'));
+
+    $this->assertFieldById('edit-field-node-display-title-und-0-value', $edit["field_node_display_title[und][0][value]"]);
+  }
+
+}
