diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 8759941..f07f490 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -59,31 +59,19 @@
 
 
 class DeprecationWarningTests(BaseTestCase):
-    def setUp(self):
-        BaseTestCase.setUp(self)
-        self._saved_warn = warnings.warn
-        self._warn_calls = []
-        warnings.warn = self._record_warn
-
-    def tearDown(self):
-        warnings.warn = self._saved_warn
-        BaseTestCase.tearDown(self)
-
-    def _record_warn(self, *args):
-        """A warnings.warn function that records calls."""
-        self._warn_calls.append(args)
-        self._saved_warn(*args)
-
     def testCloseFdsWarning(self):
         quick_process = [sys.executable, "-c", "import sys; sys.exit(0)"]
-        subprocess.call(quick_process, close_fds=True)
-        self.assertEqual([], self._warn_calls)
-        subprocess.call(quick_process, close_fds=False)
-        self.assertEqual([], self._warn_calls)
-        self.assertWarns(DeprecationWarning, subprocess.call, quick_process)
-        self.assertEqual(1, len(self._warn_calls))
-        self.assertIn('close_fds parameter was not specified',
-                      self._warn_calls[0][0])
+        with warnings.catch_warnings(record=True) as warnlist:
+            warnings.simplefilter("always")
+            subprocess.call(quick_process, close_fds=True)
+            self.assertEqual([], warnlist)
+            subprocess.call(quick_process, close_fds=False)
+            self.assertEqual([], warnlist)
+            with self.assertWarns(DeprecationWarning) as wm:
+                subprocess.Popen(quick_process).wait()
+                self.assertEqual(1, len(wm.warnings))
+                self.assertIn('close_fds parameter was not specified',
+                              str(wm.warnings[0]))
 
 
 class ProcessTestCase(BaseTestCase):
