diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index e7afa55..d61bf36 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -8,6 +8,7 @@
 import subprocess
 import sys
 import time
+import _thread
 import unittest
 from test import support
 try:
@@ -222,8 +223,34 @@
             os.chdir(oldcwd)
 
 
+@unittest.skipUnless(threading, 'Threading required for this test.')
+class TestThreadState(unittest.TestCase):
+
+    @support.reap_threads
+    def test_thread_state(self):
+        # some extra thread-state tests driven via _testcapi
+        def target():
+            idents = []
+
+            def callback():
+                idents.append(_thread.get_ident())
+
+            _testcapi._test_thread_state(callback)
+            a = b = callback
+            time.sleep(1)
+            # Check our main thread is in the list exactly 3 times.
+            self.assertEqual(idents.count(_thread.get_ident()), 3,
+                             "Couldn't find main thread correctly in the list")
+
+        target()
+        t = threading.Thread(target=target)
+        t.start()
+        t.join()
+
+
 def test_main():
-    support.run_unittest(CAPITest, TestPendingCalls, Test6012, EmbeddingTest)
+    support.run_unittest(CAPITest, TestPendingCalls, Test6012,
+                         EmbeddingTest, TestThreadState)
 
     for name in dir(_testcapi):
         if name.startswith('test_'):
@@ -232,32 +259,5 @@
                 print("internal", name)
             test()
 
-    # some extra thread-state tests driven via _testcapi
-    def TestThreadState():
-        if support.verbose:
-            print("auto-thread-state")
-
-        idents = []
-
-        def callback():
-            idents.append(_thread.get_ident())
-
-        _testcapi._test_thread_state(callback)
-        a = b = callback
-        time.sleep(1)
-        # Check our main thread is in the list exactly 3 times.
-        if idents.count(_thread.get_ident()) != 3:
-            raise support.TestFailed(
-                        "Couldn't find main thread correctly in the list")
-
-    if threading:
-        import _thread
-        import time
-        TestThreadState()
-        t = threading.Thread(target=TestThreadState)
-        t.start()
-        t.join()
-
-
 if __name__ == "__main__":
     test_main()
