#16910: test_bytes, test_unicode, and test_userstring now work with unittest test discovery.  Patch by Zachary Ware.
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index e4688d0..27e4662 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -19,7 +19,7 @@
     def __init__(self): self.seq = ['a', 'b', 'c']
     def __len__(self): return 8
 
-class BaseTest(unittest.TestCase):
+class BaseTest:
     # These tests are for buffers of values (bytes) and not
     # specific to character interpretation, used for bytes objects
     # and various string implementations
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index f88c242..26cb498 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -38,7 +38,7 @@
         return self.value
 
 
-class BaseBytesTest(unittest.TestCase):
+class BaseBytesTest:
 
     def test_basics(self):
         b = self.type2test()
@@ -682,7 +682,7 @@
                                 x, None, None, None)
 
 
-class BytesTest(BaseBytesTest):
+class BytesTest(BaseBytesTest, unittest.TestCase):
     type2test = bytes
 
     def test_buffer_is_readonly(self):
@@ -730,7 +730,7 @@
                          b's:cstr')
 
 
-class ByteArrayTest(BaseBytesTest):
+class ByteArrayTest(BaseBytesTest, unittest.TestCase):
     type2test = bytearray
 
     def test_nohash(self):
@@ -1293,16 +1293,16 @@
     def test_lower(self):
         pass
 
-class ByteArrayAsStringTest(FixedStringTest):
+class ByteArrayAsStringTest(FixedStringTest, unittest.TestCase):
     type2test = bytearray
     contains_bytes = True
 
-class BytesAsStringTest(FixedStringTest):
+class BytesAsStringTest(FixedStringTest, unittest.TestCase):
     type2test = bytes
     contains_bytes = True
 
 
-class SubclassTest(unittest.TestCase):
+class SubclassTest:
 
     def test_basic(self):
         self.assertTrue(issubclass(self.subclass2test, self.type2test))
@@ -1374,7 +1374,7 @@
 class BytesSubclass(bytes):
     pass
 
-class ByteArraySubclassTest(SubclassTest):
+class ByteArraySubclassTest(SubclassTest, unittest.TestCase):
     type2test = bytearray
     subclass2test = ByteArraySubclass
 
@@ -1389,16 +1389,10 @@
         self.assertEqual(x, b"abcd")
 
 
-class BytesSubclassTest(SubclassTest):
+class BytesSubclassTest(SubclassTest, unittest.TestCase):
     type2test = bytes
     subclass2test = BytesSubclass
 
 
-def test_main():
-    test.support.run_unittest(
-        BytesTest, AssortedBytesTest, BytesAsStringTest,
-        ByteArrayTest, ByteArrayAsStringTest, BytesSubclassTest,
-        ByteArraySubclassTest, BytearrayPEP3137Test)
-
 if __name__ == "__main__":
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 9aaedd3..8fccab3 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -33,7 +33,8 @@
 
 class UnicodeTest(string_tests.CommonTest,
         string_tests.MixinStrUnicodeUserStringTest,
-        string_tests.MixinStrUnicodeTest):
+        string_tests.MixinStrUnicodeTest,
+        unittest.TestCase):
 
     type2test = str
 
@@ -2218,8 +2219,5 @@
         self.assertRaises(TypeError, _string.formatter_field_name_split, 1)
 
 
-def test_main():
-    support.run_unittest(__name__)
-
 if __name__ == "__main__":
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_userstring.py b/Lib/test/test_userstring.py
index d5d0c89..71fcac2 100755
--- a/Lib/test/test_userstring.py
+++ b/Lib/test/test_userstring.py
@@ -3,6 +3,7 @@
 # UserString instances should behave similar to builtin string objects.
 
 import string
+import unittest
 from test import support, string_tests
 
 from collections import UserString
@@ -10,6 +11,7 @@
 class UserStringTest(
     string_tests.CommonTest,
     string_tests.MixinStrUnicodeUserStringTest,
+    unittest.TestCase
     ):
 
     type2test = UserString
@@ -42,8 +44,5 @@
         getattr(object, methodname)(*args)
 
 
-def test_main():
-    support.run_unittest(UserStringTest)
-
 if __name__ == "__main__":
-    test_main()
+    unittest.main()