diff --git a/Lib/test/test_anydbm.py b/Lib/test/test_anydbm.py
index 367360f..9399d71 100644
--- a/Lib/test/test_anydbm.py
+++ b/Lib/test/test_anydbm.py
@@ -11,7 +11,33 @@
 
 _fname = test_support.TESTFN
 
-def _delete_files():
+_all_modules = []
+
+for _name in anydbm._names:
+    try:
+        _module = __import__(_name)
+    except ImportError:
+        continue
+    _all_modules.append(_module)
+
+
+#
+# Iterates over every database module supported by anydbm
+# currently available, setting anydbm to use each in turn,
+# and yielding that module
+#
+def dbm_iterator():
+    old_default = anydbm._defaultmod
+    for module in _all_modules:
+        anydbm._defaultmod = module
+        yield module
+    anydbm._defaultmod = old_default
+
+#
+# Clean up all scratch databases we might have created
+# during testing
+#
+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 + "*"):
@@ -60,6 +86,14 @@
         keys = self.keys_helper(f)
         f.close()
 
+    def test_anydbm_access(self):
+        self.init_db()
+        f = anydbm.open(_fname, 'r')
+        key = "a".encode("ascii")
+        assert(key in f)
+        assert(f[key] == b"Python:")
+        f.close()
+
     def read_helper(self, f):
         keys = self.keys_helper(f)
         for key in self._dict:
@@ -78,16 +112,18 @@
         return keys
 
     def tearDown(self):
-        _delete_files()
+        delete_files()
 
     def setUp(self):
-        _delete_files()
+        delete_files()
+
 
 def test_main():
     try:
-        test_support.run_unittest(AnyDBMTestCase)
+        for module in dbm_iterator():
+            test_support.run_unittest(AnyDBMTestCase)
     finally:
-        _delete_files()
+        delete_files()
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_dumbdbm.py b/Lib/test/test_dumbdbm.py
index efdee75..d5a74fb 100644
--- a/Lib/test/test_dumbdbm.py
+++ b/Lib/test/test_dumbdbm.py
@@ -89,6 +89,12 @@
         keys = self.keys_helper(f)
         f.close()
 
+    def test_write_contains(self):
+        f = dumbdbm.open(_fname)
+        f[b'1'] = b'hello'
+        assert b'1' in f
+        f.close()
+
     def test_write_write_read(self):
         # test for bug #482460
         f = dumbdbm.open(_fname)
diff --git a/Lib/test/test_shelve.py b/Lib/test/test_shelve.py
index 543afb1..f8fcda9 100644
--- a/Lib/test/test_shelve.py
+++ b/Lib/test/test_shelve.py
@@ -3,6 +3,7 @@
 import glob
 from test import test_support
 from UserDict import DictMixin
+from test.test_anydbm import dbm_iterator
 
 def L1(s):
     return s.decode("latin-1")
@@ -148,15 +149,16 @@
     _in_mem = True
 
 def test_main():
-    test_support.run_unittest(
-        TestAsciiFileShelve,
-        TestBinaryFileShelve,
-        TestProto2FileShelve,
-        TestAsciiMemShelve,
-        TestBinaryMemShelve,
-        TestProto2MemShelve,
-        TestCase
-    )
+    for module in dbm_iterator():
+        test_support.run_unittest(
+            TestAsciiFileShelve,
+            TestBinaryFileShelve,
+            TestProto2FileShelve,
+            TestAsciiMemShelve,
+            TestBinaryMemShelve,
+            TestProto2MemShelve,
+            TestCase
+        )
 
 if __name__ == "__main__":
     test_main()
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()
