diff --git a/migrate_source_csv/tests/src/Unit/CSVFileObjectTest.php b/migrate_source_csv/tests/src/Unit/CSVFileObjectTest.php
new file mode 100644
index 0000000..c5eb16a
--- /dev/null
+++ b/migrate_source_csv/tests/src/Unit/CSVFileObjectTest.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * @file
+ * Code for CSVFileObjectTest.php.
+ */
+
+namespace Drupal\Tests\migrate_source_csv\Unit;
+
+use Drupal\migrate_source_csv\CSVFileObject;
+use org\bovigo\vfs\vfsStream;
+use org\bovigo\vfs\content\LargeFileContent;
+
+/**
+ * @coversDefaultClass \Drupal\migrate_source_csv\CSVFileObject
+ *
+ * @group migrate_source_csv
+ */
+class CSVFileObjectTest extends CSVUnitTestCase {
+
+  /**
+   * Tests that the construction appropriately creates a CSVFileObject.
+   *
+   * @test
+   *
+   * @covers ::__construct
+   */
+  public function create() {
+    $csv_file_object = new CSVFileObject($this->happyPath);
+    $this->assertInstanceOf('\Drupal\migrate_source_csv\CSVFileObject', $csv_file_object);
+    $flags = CSVFileObject::READ_CSV | CSVFileObject::READ_AHEAD | CSVFileObject::DROP_NEW_LINE | CSVFileObject::SKIP_EMPTY;
+    $this->assertEquals($flags, $csv_file_object->getFlags());
+  }
+
+  /**
+   * Tests that the header row count is correctly returned.
+   *
+   * @test
+   *
+   * @covers ::getHeaderRowCount
+   * @covers ::setHeaderRowCount
+   */
+  public function headerRowCount() {
+    $csv_file_object = new CSVFileObject($this->happyPath);
+    $expected = 1;
+    $csv_file_object->setHeaderRowCount($expected);
+    $actual = $csv_file_object->getHeaderRowCount();
+
+    $this->assertEquals($expected, $actual);
+  }
+
+  /**
+   * Tests that line count is correct.
+   *
+   * @test
+   *
+   * @covers ::count
+   */
+  public function countLines() {
+    $csv_file_object = new CSVFileObject($this->happyPath);
+    $expected = 15;
+    $csv_file_object->setHeaderRowCount(1);
+    $actual = $csv_file_object->count();
+
+    $this->assertEquals($expected, $actual);
+  }
+
+  /**
+   * Tests that the current row is correctly returned.
+   *
+   * @test
+   *
+   * @covers ::current
+   * @covers ::rewind
+   * @covers ::getColumnNames
+   * @covers ::setColumnNames
+   */
+  public function current() {
+    $csv_file_object = new CSVFileObject($this->happyPath);
+    $column_names = array(
+      array('id' => 'Identifier'),
+      array('first_name' => 'First Name'),
+      array('last_name' => 'Last Name'),
+      array('email' => 'Email'),
+      array('country' => 'Country'),
+      array('ip_address' => 'IP Address'),
+    );
+    $columns = array();
+    foreach ($column_names as $values) {
+      $columns[] = key($values);
+    }
+    $row = array(
+      '1',
+      'Justin',
+      'Dean',
+      'jdean0@example.com',
+      'Indonesia',
+      '60.242.130.40',
+    );
+
+    $csv_file_object->rewind();
+    $current = $csv_file_object->current();
+    $this->assertArrayEquals($columns, $current);
+
+    $csv_file_object->setHeaderRowCount(1);
+    $csv_file_object->rewind();
+    $current = $csv_file_object->current();
+    $this->assertArrayEquals($row, $current);
+
+    $csv_file_object->setColumnNames($column_names);
+    $csv_file_object->rewind();
+    $current = $csv_file_object->current();
+    $this->assertArrayEquals($columns, array_keys($current));
+    $this->assertArrayEquals($row, array_values($current));
+    $this->assertArrayEquals($column_names, $csv_file_object->getColumnNames());
+  }
+
+}
