diff --git a/lib/geocoder.rb b/lib/geocoder.rb
index be59577ad0c5d2006ee3f46c0aa24133b46f6b75..76f5ec20cc01a26f4ce05ca73516ce786a6ac815 100644
--- a/lib/geocoder.rb
+++ b/lib/geocoder.rb
@@ -57,7 +57,7 @@ module Geocoder
   # All street address lookups, default first.
   #
   def street_lookups
-    [:google, :google_premier, :yahoo, :bing, :geocoder_ca, :yandex, :nominatim,:mapquest]
+    [:google, :google_premier, :yahoo, :bing, :geocoder_ca, :yandex, :nominatim, :mapquest, :test]
   end
 
   ##
diff --git a/lib/geocoder/configuration.rb b/lib/geocoder/configuration.rb
index 49c4c5449000a46f19da1f1dcf5a92b1ff5d59d1..7bbe787daa8125d6597d5249962ed64ed6ea4688 100644
--- a/lib/geocoder/configuration.rb
+++ b/lib/geocoder/configuration.rb
@@ -99,5 +99,6 @@ module Geocoder
         instance.set_defaults
       end
     end
+
   end
 end
diff --git a/lib/geocoder/lookups/test.rb b/lib/geocoder/lookups/test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e06171c9dbc96a4ce03a54b2832c7262efa95b33
--- /dev/null
+++ b/lib/geocoder/lookups/test.rb
@@ -0,0 +1,32 @@
+require 'geocoder/lookups/base'
+require 'geocoder/results/test'
+
+module Geocoder
+  module Lookup
+    class Test < Base
+
+      def self.add_stub(query, results)
+        stubs[query] = results
+      end
+
+      def self.read_stub(query)
+        stubs.fetch(query) { raise ArgumentError, "unknown stub request #{query}" }
+      end
+
+      def self.stubs
+        @stubs ||= {}
+      end
+
+      def self.reset
+        @stubs = {}
+      end
+
+      private
+
+      def results(query, reverse = false)
+        Geocoder::Lookup::Test.read_stub(query)
+      end
+
+    end
+  end
+end
diff --git a/lib/geocoder/results/test.rb b/lib/geocoder/results/test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d029d1a71b5b8418a5fcf2d0eec6f3c08e565042
--- /dev/null
+++ b/lib/geocoder/results/test.rb
@@ -0,0 +1,29 @@
+require 'geocoder/results/base'
+
+module Geocoder
+  module Result
+    class Test < Base
+
+      def address
+        @data['address']
+      end
+
+      def state
+        @data['state']
+      end
+
+      def state_code
+        @data['state_code']
+      end
+
+      def country
+        @data['country']
+      end
+
+      def country_code
+        @data['country_code']
+      end
+
+    end
+  end
+end
diff --git a/test/test_mode_test.rb b/test/test_mode_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ec8b4db1504a3efeea1bb4db8ad34d91bbe9ddc8
--- /dev/null
+++ b/test/test_mode_test.rb
@@ -0,0 +1,52 @@
+require 'test_helper'
+require 'geocoder/lookups/test'
+
+class TestModeTest < Test::Unit::TestCase
+
+  def setup
+    @_original_lookup = Geocoder::Configuration.lookup
+  end
+
+  def teardown
+    Geocoder::Lookup::Test.reset
+    Geocoder::Configuration.lookup = @_original_lookup
+  end
+
+  def test_search_with_known_stub
+    Geocoder::Configuration.lookup = :test
+    attributes = {
+      'latitude'   => 40.7143528,
+      'longitude'  => -74.0059731,
+      'address'    => 'New York, NY, USA',
+      'state'      => 'New York',
+      'state_code' => 'NY',
+      'country'    => 'United States',
+      'country_code' => 'US',
+    }
+    coordinates = [attributes['latitude'], attributes['longitude']]
+
+    Geocoder::Lookup::Test.add_stub("New York, NY", [attributes])
+
+    results = Geocoder.search("New York, NY")
+    assert_equal 1, results.size
+
+    result = results.first
+    assert_equal coordinates,                result.coordinates
+    assert_equal attributes['latitude'],     result.latitude
+    assert_equal attributes['longitude'],    result.longitude
+    assert_equal attributes['address'],      result.address
+    assert_equal attributes['state'],        result.state
+    assert_equal attributes['state_code'],   result.state_code
+    assert_equal attributes['country'],      result.country
+    assert_equal attributes['country_code'], result.country_code
+  end
+
+  def test_search_with_unknown_stub
+    Geocoder::Configuration.lookup = :test
+
+    assert_raise ArgumentError do
+      Geocoder.search("New York, NY")
+    end
+  end
+
+end