diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb
index 9c54766f982ac157fbb471f45bdcc12116446cb6..c5b1efdf08cd5e88938021d7f6fd3db06427596c 100644
--- a/test/geocoder_test.rb
+++ b/test/geocoder_test.rb
@@ -31,7 +31,7 @@ class GeocoderTest < Test::Unit::TestCase
   end
 
   def test_does_not_choke_on_nil_address
-    Geocoder.send(:valid_lookups).each do |l|
+    all_lookups.each do |l|
       Geocoder::Configuration.lookup = l
       assert_nothing_raised { Venue.new("Venue", nil).geocode }
     end
@@ -40,11 +40,9 @@ class GeocoderTest < Test::Unit::TestCase
   def test_does_not_choke_on_timeout
     # keep test output clean: suppress timeout warning
     orig = $VERBOSE; $VERBOSE = nil
-    Geocoder.send(:valid_lookups).each do |l|
+    all_lookups.each do |l|
       Geocoder::Configuration.lookup = l
-      assert_nothing_raised do
-        Geocoder.search("timeout")
-      end
+      assert_nothing_raised { Geocoder.search("timeout") }
     end
     $VERBOSE = orig
   end
@@ -130,24 +128,31 @@ class GeocoderTest < Test::Unit::TestCase
     assert_equal address, v.address
   end
 
+  def test_returns_nil_when_no_results
+    street_lookups.each do |l|
+      Geocoder::Configuration.lookup = l
+      assert_nil Geocoder.search("no results"),
+        "Lookup #{l} does not return nil when no results."
+    end
+  end
+
+  def test_result_has_required_attributes
+    all_lookups.each do |l|
+      Geocoder::Configuration.lookup = l
+      result = Geocoder.search(45.423733, -75.676333)
+      assert_result_has_required_attributes(result)
+    end
+  end
+
 
   # --- Google ---
 
-  def test_result_address_components_of_type
+  def test_google_result_components
     result = Geocoder.search("Madison Square Garden, New York, NY")
     assert_equal "Manhattan",
       result.address_components_of_type(:sublocality).first['long_name']
   end
 
-  def test_google_result_has_required_attributes
-    result = Geocoder.search("Madison Square Garden, New York, NY")
-    assert_result_has_required_attributes(result)
-  end
-
-  def test_google_returns_nil_when_no_results
-    assert_nil Geocoder.search("no results")
-  end
-
 
   # --- Yahoo ---
 
@@ -164,17 +169,6 @@ class GeocoderTest < Test::Unit::TestCase
       result.address
   end
 
-  def test_yahoo_result_has_required_attributes
-    Geocoder::Configuration.lookup = :yahoo
-    result = Geocoder.search("Madison Square Garden, New York, NY")
-    assert_result_has_required_attributes(result)
-  end
-
-  def test_yahoo_returns_nil_when_no_results
-    Geocoder::Configuration.lookup = :yahoo
-    assert_nil Geocoder.search("no results")
-  end
-
 
   # --- FreeGeoIp ---
 
@@ -188,11 +182,6 @@ class GeocoderTest < Test::Unit::TestCase
     assert_equal "Plano, TX 75093, United States", result.address
   end
 
-  def test_freegeoip_result_has_required_attributes
-    result = Geocoder.search("74.200.247.59")
-    assert_result_has_required_attributes(result)
-  end
-
 
   # --- search queries ---
 
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 621e7ee9ce3c6c50fe4f22bbb17c88283b54bca5..38de15d0e38c05ac103c7f4f4f578fd581ca36cf 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -171,4 +171,12 @@ class Test::Unit::TestCase
       :msg => ["Madison Square Garden", 40.750354, -73.993371]
     }[abbrev]
   end
+
+  def all_lookups
+    Geocoder.send(:valid_lookups)
+  end
+
+  def street_lookups
+    all_lookups - [:freegeoip]
+  end
 end