diff --git a/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php b/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php
index e4e5235c4c696eb578e6dfb560b7f359ea9b8f27..a953339688430fe189a2c259ad8b6f0fa0127aac 100644
--- a/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php
+++ b/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php
@@ -80,12 +80,6 @@ class SQLite3QueryResult implements DatabaseQueryResultInterface
     protected $affected_rows;
 
     /**
-     * Number of rows in the result set.
-     * @var Integer
-     */
-    protected $num_rows;
-
-    /**
      * Constructor to build the results.
      *
      * @param String      $query    Executed query
@@ -131,7 +125,6 @@ class SQLite3QueryResult implements DatabaseQueryResultInterface
         unset($this->error_number);
         unset($this->insert_id);
         unset($this->affected_rows);
-        unset($this->num_rows);
     }
 
     /**
@@ -222,11 +215,11 @@ class SQLite3QueryResult implements DatabaseQueryResultInterface
     /**
      * Returns the number of rows in the result set.
      *
-     * @return mixed $number Number of rows in the result set.
+     * @return mixed $number
      */
     public function number_of_rows()
     {
-        // not supported by SQLite3
+        return 0;
     }
 
     /**
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/MockSQLite3Result.php b/src/Lunr/Gravity/Database/SQLite3/Tests/MockSQLite3Result.php
deleted file mode 100644
index 31a12dd86ab423069eac5cd8f68cd5c41be5b24b..0000000000000000000000000000000000000000
--- a/src/Lunr/Gravity/Database/SQLite3/Tests/MockSQLite3Result.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/**
- * Contains MockSQLite3Result class.
- *
- * @package  Lunr\Gravity\Database\SQLite3\Tests
- * @author   Ruben de Groot
- */
-
-namespace Lunr\Gravity\Database\SQLite3\Tests;
-
-use SQLite3Result;
-
-class MockSQLite3Result
-{
-
-    /**
-     * Instance of a real SQLite3Result class.
-     * @var \SQLite3Result
-     */
-    private $sqlite3_result;
-
-    /**
-     * Constructor.
-     *
-     * @param SQLite3Result $sqlite3_result Instance of the SQLite3Result class
-     */
-    public function __construct($sqlite3_result)
-    {
-        $this->sqlite3_result = $sqlite3_result;
-    }
-
-    /**
-     * Destructor.
-     */
-    public function __destruct()
-    {
-        unset($this->mysqli_result);
-    }
-
-    /**
-     * Forward non-mocked methods to the SQLite3 class.
-     *
-     * @param String $method    Method name
-     * @param array  $arguments Arguments to that method
-     *
-     * @return mixed $return Return value of the respective SQLite3 method.
-     */
-    public function __call($method, $arguments)
-    {
-        return call_user_func_array(array($this->sqlite3_result, $method), $arguments);
-    }
-
-    /**
-     * Fake property access to the SQLite3 class.
-     *
-     * @param String $name Property name
-     *
-     * @return mixed $return Property value.
-     */
-    public function __get($name)
-    {
-        switch ($name)
-        {
-            case 'affected_rows':
-                return 8;
-            case 'num_rows':
-                return 8;
-            default:
-                return $this->sqlite3_result->{$name};
-        }
-    }
-
-}
-
-?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..bce1c5385ca42e099735cd81d815e72636f70f96
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php
@@ -0,0 +1,141 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultBaseTest class.
+ *
+ * Basic test for the class SQLite3QueryResult.
+ *
+ * @package  Lunr\Gravity\Database\SQLite3\Tests
+ * @author   Ruben de Groot
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+
+class SQLite3QueryResultBaseTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with no result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithNoResult();
+    }
+
+    /**
+     * Test that error message is empty on successful query.
+     */
+    public function testErrorMessageIsEmpty()
+    {
+        $property = $this->get_accessible_reflection_property('error_message');
+        $this->assertSame('', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is zero on successful query.
+     */
+    public function testErrorNumberIsZero()
+    {
+        $property = $this->get_accessible_reflection_property('error_number');
+        $this->assertSame(0, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is zero on successful query.
+     */
+    public function testInsertIDIsZero()
+    {
+        $property = $this->get_accessible_reflection_property('insert_id');
+        $this->assertSame(0, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that affected rows is a number on successful query.
+     */
+    public function testAffectedRowsIsNumber()
+    {
+        $property = $this->get_accessible_reflection_property('affected_rows');
+        $this->assertInternalType('int', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that the query is passed correctly on successful query.
+     */
+    public function testQueryIsPassedCorrectly()
+    {
+        $property = $this->get_accessible_reflection_property('query');
+        $this->assertSame($this->query, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that affected_rows() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::affected_rows
+     */
+    public function testAffectedRowsReturnsNumber()
+    {
+        $this->set_reflection_property_value('affected_rows', 12);
+        $this->assertSame(12, $this->class->affected_rows());
+    }
+
+    /**
+     * Test that error_message() returns a string.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::error_message
+     */
+    public function testErrorMessageReturnsString()
+    {
+        $this->set_reflection_property_value('error_message', '');
+        $this->assertSame('', $this->class->error_message());
+    }
+
+    /**
+     * Test that error_number() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::error_number
+     */
+    public function testErrorNumberReturnsNumber()
+    {
+        $this->set_reflection_property_value('error_number', 0);
+        $this->assertSame(0, $this->class->error_number());
+    }
+
+    /**
+     * Test that insert_id() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::insert_id
+     */
+    public function testInsertIDReturnsNumber()
+    {
+        $this->set_reflection_property_value('insert_id', 0);
+        $this->assertSame(0, $this->class->insert_id());
+    }
+
+    /**
+     * Test that query() returns a string.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::query
+     */
+    public function testQueryReturnsString()
+    {
+        $this->set_reflection_property_value('query', '');
+        $this->assertSame('', $this->class->query());
+    }
+
+    /**
+     * Test that the sqlite3 class is passed by reference.
+     */
+    public function testSQLite3IsPassedByReference()
+    {
+        $property = $this->get_accessible_reflection_property('sqlite3');
+
+        $value =$property->getValue($this->class);
+
+        $this->assertInstanceOf(\SQLite3::class, $value);
+        $this->assertSame($this->sqlite3, $value);
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac690c9c31d599ea8362d4caf7ce0fb09eefc773
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php
@@ -0,0 +1,171 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultFailedTest class.
+ *
+ * Tests for when there is a failed query.
+ *
+ * @package  Lunr\Gravity\Database\SQLite3\Tests
+ * @author   Ruben de Groot
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+
+class SQLite3QueryResultFailedTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with a failed query.
+     */
+    public function setUp()
+    {
+        $this->setUpWithFailedQuery();
+    }
+
+    /**
+     * Test that the success flag is FALSE.
+     */
+    public function testSuccessIsFalse()
+    {
+        $property = $this->get_accessible_reflection_property('success');
+
+        $this->assertFalse($property->getValue($this->class));
+    }
+
+    /**
+     * Test that the result value is FALSE.
+     */
+    public function testResultIsFalse()
+    {
+        $property = $this->get_accessible_reflection_property('result');
+
+        $this->assertFalse($property->getValue($this->class));
+    }
+
+    /**
+     * Test that the freed flag is TRUE.
+     */
+    public function testFreedIsTrue()
+    {
+        $property = $this->get_accessible_reflection_property('freed');
+
+        $this->assertTrue($property->getValue($this->class));
+    }
+
+    /**
+     * Test that the has_failed() method returns TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_failed
+     */
+    public function testHasFailedReturnsTrue()
+    {
+        $this->assertTrue($this->class->has_failed());
+    }
+
+    /**
+     * Test that error message is a string on failed query.
+     */
+    public function testErrorMessageIsString()
+    {
+        $property = $this->get_accessible_reflection_property('error_message');
+
+        $this->assertInternalType('string', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is a number on a failed query.
+     */
+    public function testErrorNumberIsNumber()
+    {
+        $property = $this->get_accessible_reflection_property('error_number');
+
+        $this->assertInternalType('int', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is zero on successful query.
+     */
+    public function testInsertIDIsZero()
+    {
+        $property = $this->get_accessible_reflection_property('insert_id');
+
+        $this->assertEquals(0, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that result_array() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayReturnsEmptyArray()
+    {
+        $value = $this->class->result_array();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_row() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowReturnsEmptyArray()
+    {
+        $value = $this->class->result_row();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_column() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnReturnsEmptyArray()
+    {
+        $value = $this->class->result_column('column');
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_cell() returns NULL.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellReturnsNull()
+    {
+        $this->assertNull($this->class->result_cell('cell'));
+    }
+
+    /**
+     * Test that the has_deadlock() method returns TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_deadlock
+     */
+    public function testHasDeadlockReturnsTrue()
+    {
+        $this->set_reflection_property_value('error_number', 6);
+
+        $this->assertTrue($this->class->has_deadlock());
+    }
+
+    /**
+     * Test that the has_deadlock() method returns FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_deadlock
+     */
+    public function testHasDeadlockReturnsFalse()
+    {
+        $this->set_reflection_property_value('error_number', 999);
+
+        $this->assertFalse($this->class->has_deadlock());
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..185c97e13f433cb8fe4213fdfb7aa6bde164ff8f
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php
@@ -0,0 +1,172 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultFreeTest class.
+ *
+ * Tests to check if the data is freed when there is a result.
+ *
+ * @package  Lunr\Gravity\Database\SQLite3\Tests
+ * @author   Ruben de Groot
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+
+class SQLite3QueryResultFreeTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with a result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithResult();
+    }
+
+    /**
+     * Test that free_result() does try to free the result data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::free_result
+     */
+    public function testFreeResultFreesIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $method = $this->get_accessible_reflection_method('free_result');
+        $method->invoke($this->class);
+    }
+
+    /**
+     * Test that free_result() does not try to free the result data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::free_result
+     */
+    public function testFreeResultDoesNotFreeIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $method = $this->get_accessible_reflection_method('free_result');
+        $method->invoke($this->class);
+
+        $this->set_reflection_property_value('freed', FALSE);
+    }
+
+    /**
+     * Test that result_array() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_array();
+    }
+
+    /**
+     * Test that result_array() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_array();
+    }
+
+    /**
+     * Test that result_row() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_row();
+    }
+
+    /**
+     * Test that result_row() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_row();
+    }
+
+    /**
+     * Test that result_column() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_column('col');
+    }
+
+    /**
+     * Test that result_column() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_column('col');
+    }
+
+    /**
+     * Test that result_cell() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_cell('cell');
+    }
+
+    /**
+     * Test that result_cell() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_cell('cell');
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..662e7c5dd2fa9c090be884b72318824658c3333e
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultNoResultTest class.
+ *
+ * Tests when there is a successful connection and no result.
+ *
+ * @package  Lunr\Gravity\Database\SQLite3\Tests
+ * @author   Ruben de Groot
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+
+class SQLite3QueryResultNoResultTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with no result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithNoResult();
+    }
+
+    /**
+     * Test that the success flag is TRUE.3
+     */
+    public function testSuccessIsTrue()
+    {
+        $this->get_accessible_reflection_property('success');
+        $this->assertTrue($this->get_reflection_property_value('success'));
+    }
+
+    /**
+     * Test that the result value is FALSE.
+     *
+     * In the setUp the result is set to TRUE when there is an empty result.
+     */
+    public function testResultIsEmpty()
+    {
+        $this->get_accessible_reflection_property('result');
+        $this->assertTrue($this->get_reflection_property_value('result'));
+    }
+
+    /**
+     * Test that the freed flag is TRUE.
+     */
+    public function testFreedIsTrue()
+    {
+        $this->get_accessible_reflection_property('freed');
+        $this->assertTrue($this->get_reflection_property_value('freed'));
+    }
+
+    /**
+     * Test that the has_failed() method returns FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_failed
+     */
+    public function testHasFailedReturnsFalse()
+    {
+        $this->assertFalse($this->class->has_failed());
+    }
+
+    /**
+     * Test that result_array() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayReturnsEmptyArray()
+    {
+        $value = $this->class->result_array();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_row() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowReturnsEmptyArray()
+    {
+        $value = $this->class->result_row();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_column() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnReturnsEmptyArray()
+    {
+        $value = $this->class->result_column('column');
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_cell() returns NULL.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellReturnsNull()
+    {
+        $this->assertNull($this->class->result_cell('cell'));
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php
index 23aec9644b0ccf55853bd41c01d2b50dca45ae6c..14d19c8d0ab450b0424c944b71d87da88e814019 100644
--- a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php
@@ -3,6 +3,8 @@
 /**
  * Contains SQLite3QueryResultResultTest class.
  *
+ * Tests when there is a successful connection and a result.
+ *
  * @package  Lunr\Gravity\Database\SQLite3\Tests
  * @author   Ruben de Groot
  */
@@ -13,54 +15,147 @@ class SQLite3QueryResultResultTest extends SQLite3QueryResultTest
 {
 
     /**
-     * TestCase Constructor.
+     * Override the default setUp with a setup with a result.
      */
     public function setUp()
     {
-        $this->resultSetSetup();
+        $this->setUpWithResult();
     }
 
     /**
      * Test that the success flag is TRUE.
-     *
-     * @requires extension sqlite3
      */
     public function testSuccessIsTrue()
     {
-        $property = $this->result_reflection->getProperty('success');
-        $property->setAccessible(TRUE);
-
-        $this->assertTrue($property->getValue($this->result));
+        $this->get_accessible_reflection_property('success');
+        $this->assertTrue($this->get_reflection_property_value('success'));
     }
 
     /**
      * Test that the freed flag is FALSE.
-     *
-     * @requires extension sqlite3
      */
     public function testFreedIsFalse()
     {
-        $property = $this->result_reflection->getProperty('freed');
-        $property->setAccessible(TRUE);
+        $this->get_accessible_reflection_property('freed');
+        $this->assertFalse($this->get_reflection_property_value('freed'));
+    }
 
-        $this->assertFalse($property->getValue($this->result));
+    /**
+     * Test that the has_failed() method returns FALSE.
+     *
+     * @covers   Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_failed
+     */
+    public function testHasFailedReturnsFalse()
+    {
+        $this->assertFalse($this->class->has_failed());
     }
 
     /**
      * Test that affected_rows() returns a number.
      *
-     * @requires extension SQLite3
      * @covers   Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::affected_rows
      */
-    public function testNumberOfRowsReturnsNumber()
+    public function testAffectedRowsReturnsNumber()
+    {
+        $this->set_reflection_property_value('affected_rows', 8);
+        $this->assertSame(8, $this->class->affected_rows());
+    }
+
+    /**
+     * Test that result_row() returns an one-dimensional array.
+     *
+     * @covers   Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_row
+     */
+    public function testResultRowReturnsArray()
+    {
+        $result = array('col1' => 'val1', 'col2' => 'val2');
+
+        $this->sqlite3_result->expects($this->once())
+                             ->method('fetchArray')
+                             ->will($this->returnValue($result));
+
+        $value = $this->class->result_row();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEquals($result, $value);
+    }
+
+    /**
+     * Test that result_array() returns an multidimensional array.
+     *
+     * @covers   Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_array
+     */
+    public function testResultArrayReturnsArray()
+    {
+        $result = array(0 => array('col1' => 'val1', 'col2' => 'val2'), 1 => array('col1' => 'val3', 'col2' => 'val4'));
+
+        $this->sqlite3_result->expects($this->at(0))
+                             ->method('fetchArray')
+                             ->will($this->returnValue($result[0]));
+        $this->sqlite3_result->expects($this->at(1))
+                             ->method('fetchArray')
+                             ->will($this->returnValue($result[1]));
+        $this->sqlite3_result->expects($this->at(2))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(NULL));
+
+        $value = $this->class->result_array();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEquals($result, $value);
+    }
+
+    /**
+     * Test that result_column() returns an one-dimensional array.
+     *
+     * @covers   Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_column
+     */
+    public function testResultColumnReturnsArray()
+    {
+        $result = array('val1', 'val3');
+
+        $this->sqlite3_result->expects($this->at(0))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('col1' => 'val1', 'col2' => 'val2')));
+        $this->sqlite3_result->expects($this->at(1))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('col1' => 'val3', 'col2' => 'val4')));
+        $this->sqlite3_result->expects($this->at(2))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(NULL));
+
+        $value = $this->class->result_column('col1');
+
+        $this->assertInternalType('array', $value);
+        $this->assertEquals($result, $value);
+    }
+
+    /**
+     * Test that result_cell() returns value.
+     *
+     * @covers   Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_cell
+     */
+    public function testResultCellReturnsValue()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('cell' => 'value')));
+
+        $this->assertEquals('value', $this->class->result_cell('cell'));
+    }
+
+    /**
+     * Test that result_cell() returns NULL if the column does not exist.
+     *
+     * @covers   Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_cell
+     */
+    public function testResultCellReturnsNullIfColumnDoesNotExist()
     {
-        $class = $this->result_reflection->getProperty('affected_rows');
-        $class->setAccessible(TRUE);
-        $class->setValue($this->result, 8);
+        $this->sqlite3_result->expects($this->once())
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('cell' => 'value')));
 
-        $value = $this->result->affected_rows();
-        $this->assertInternalType('int', $value);
-        $this->assertEquals(8, $value);
+        $this->assertNull($this->class->result_cell('cell1'));
     }
 
 }
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php
index 176ffb4a51253310cd81094f08708a545101c61a..5ce2920d71dbcd6b2609c6014bc91f1158803124 100644
--- a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php
@@ -19,54 +19,85 @@ class SQLite3QueryResultTest extends LunrBaseTest
 {
 
     /**
-     * Instance of the SQLite3Result class.
-     * @var SQLite3Result
+     * Instance of the SQLite3 class.
+     * @var SQLite3
      */
-    protected $result;
+    protected $sqlite3;
 
     /**
-     * Reflection instance of the SQLite3QueryResult class.
-     * @var ReflectionClass
+     * The executed query.
+     * @var String
      */
-    protected $result_reflection;
+    protected $query;
 
     /**
-     * Query result
-     * @var mixed
+     * Instance of the SQLite3Result class.
+     * @var SQLite3Result
      */
-    protected $query_result;
+    protected $sqlite3_result;
 
     /**
-     * Instance of the SQLite3 class.
-     * @var SQLite3
+     * TestCase Constructor passing a SQLite3Result object.
+     *
+     * @return void
      */
-    protected $sqlite3;
+    public function setUpWithResult()
+    {
+        $this->sqlite3 = $this->getMock('Lunr\Gravity\Database\SQLite3\LunrSQLite3');
+
+        $this->query = 'SELECT * FROM table';
+
+        $this->sqlite3_result = $this->getMockBuilder('SQLite3Result')
+                                     ->disableOriginalConstructor()
+                                     ->getMock();
+
+        $this->class = new SQLite3QueryResult($this->query, $this->sqlite3_result, $this->sqlite3);
+
+        $this->reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
+    }
 
     /**
-     * The executed query.
-     * @var String
+     * TestCase Constructor with a FALSE instead of a SQLite3Result object.
+     *
+     * @return void
      */
-    protected $query;
+    public function setUpWithNoResult()
+    {
+        $this->sqlite3 = $this->getMock('Lunr\Gravity\Database\SQLite3\LunrSQLite3');
+
+        $this->query = 'SELECT * FROM table';
+
+        $this->sqlite3_result = TRUE;
+
+        $this->class = new SQLite3QueryResult($this->query, $this->sqlite3_result, $this->sqlite3);
 
+        $this->reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
+
+        $this->set_reflection_property_value('affected_rows', 12);
+        $this->set_reflection_property_value('insert_id', 0);
+        $this->set_reflection_property_value('error_message', '');
+        $this->set_reflection_property_value('error_number', 0);
+    }
 
     /**
-     * TestCase Constructor passing a SQLite3Result object.
+     * TestCase Constructor with a FALSE instead of a SQLite3Result object.
      *
      * @return void
      */
-    public function resultSetSetup()
+    public function setUpWithFailedQuery()
     {
         $this->sqlite3 = $this->getMock('Lunr\Gravity\Database\SQLite3\LunrSQLite3');
 
         $this->query = 'SELECT * FROM table';
 
-        $this->query_result = $this->getMockBuilder('Lunr\Gravity\Database\SQLite3\MockSQLite3Result')
-                                   ->setMethods(array('finalize'))
-                                   ->getMock();
+        $this->sqlite3_result = FALSE;
+
+        $this->class = new SQLite3QueryResult($this->query, $this->sqlite3_result, $this->sqlite3);
 
-        $this->result = new SQLite3QueryResult($this->query, $this->query_result, $this->sqlite3);
+        $this->reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
 
-        $this->result_reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
+        $this->set_reflection_property_value('error_message', 'The query failed.');
+        $this->set_reflection_property_value('error_number', 8);
     }
 
     /**
@@ -76,9 +107,9 @@ class SQLite3QueryResultTest extends LunrBaseTest
     {
         unset($this->sqlite3);
         unset($this->query);
-        unset($this->query_result);
-        unset($this->result);
-        unset($this->result_reflection);
+        unset($this->sqlite3_result);
+        unset($this->class);
+        unset($this->reflection);
     }
 
 }
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 5aee930dca578369bc4d89c77054a12ba7562647..6ed66f752d6993019af1a8b1673a6c8dd216e28a 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -98,6 +98,7 @@
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultFailedTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultSuccessTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultResultTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultFreeTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLAsyncQueryResultBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLAsyncQueryResultFetchTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderBaseTest.php</file>
@@ -126,7 +127,7 @@
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderInsertTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderUpdateTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderConditionTest.php</file>
-            <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderGroupByTest.php</file>
+            <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderGroupByTest.php</file>	
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLSimpleDMLQueryBuilderBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLSimpleDMLQueryBuilderConditionalTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLSimpleDMLQueryBuilderSelectTest.php</file>
@@ -153,6 +154,11 @@
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3DMLQueryBuilderInsertTest.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3DMLQueryBuilderQueryTest.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3DMLQueryBuilderUpdateTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php</file>
+            <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseConnectionPoolBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseConnectionPoolEmptyTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseConnectionPoolUnsupportedTest.php</file>
