applies the better dbm and shelve related unittests.  bug 1007 from larryhastings
diff --git a/Lib/test/test_whichdb.py b/Lib/test/test_whichdb.py
index 675507a..d3eda84 100644
--- a/Lib/test/test_whichdb.py
+++ b/Lib/test/test_whichdb.py
@@ -10,57 +10,49 @@
 import anydbm
 import tempfile
 import glob
+from test.test_anydbm import delete_files, dbm_iterator
 
 _fname = test.test_support.TESTFN
 
-def _delete_files():
-    # we don't know the precise name the underlying database uses
-    # so we use glob to locate all names
-    for f in glob.glob(_fname + "*"):
-        try:
-            os.unlink(f)
-        except OSError:
-            pass
-
 class WhichDBTestCase(unittest.TestCase):
     # Actual test methods are added to namespace
     # after class definition.
     def __init__(self, *args):
         unittest.TestCase.__init__(self, *args)
 
+    def test_whichdb(self):
+        for module in dbm_iterator():
+            # Check whether whichdb correctly guesses module name
+            # for databases opened with "module" module.
+            # Try with empty files first
+            name = module.__name__
+            if name == 'dumbdbm':
+                continue   # whichdb can't support dumbdbm
+            f = module.open(_fname, 'c')
+            f.close()
+            self.assertEqual(name, whichdb.whichdb(_fname))
+            # Now add a key
+            f = module.open(_fname, 'w')
+            f[b"1"] = b"1"
+            # and test that we can find it
+            assert b"1" in f
+            # and read it
+            assert f[b"1"] == b"1"
+            f.close()
+            self.assertEqual(name, whichdb.whichdb(_fname))
+
     def tearDown(self):
-        _delete_files()
+        delete_files()
 
     def setUp(self):
-        _delete_files()
+        delete_files()
 
-for name in anydbm._names:
-    # we define a new test method for each
-    # candidate database module.
-    try:
-        mod = __import__(name)
-    except ImportError:
-        continue
-
-    def test_whichdb_name(self, name=name, mod=mod):
-        # Check whether whichdb correctly guesses module name
-        # for databases opened with module mod.
-        # Try with empty files first
-        f = mod.open(_fname, 'c')
-        f.close()
-        self.assertEqual(name, whichdb.whichdb(_fname))
-        # Now add a key
-        f = mod.open(_fname, 'w')
-        f[b"1"] = b"1"
-        f.close()
-        self.assertEqual(name, whichdb.whichdb(_fname))
-    setattr(WhichDBTestCase,"test_whichdb_%s" % name, test_whichdb_name)
 
 def test_main():
     try:
         test.test_support.run_unittest(WhichDBTestCase)
     finally:
-        _delete_files()
+        delete_files()
 
 if __name__ == "__main__":
     test_main()