diff --git a/Lib/unittest/__init__.py b/Lib/unittest/__init__.py
index e0c64d4..c12e669 100644
--- a/Lib/unittest/__init__.py
+++ b/Lib/unittest/__init__.py
@@ -60,4 +60,7 @@
 from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames,
                      findTestCases)
 from .main import TestProgram, main
-from .runner import TextTestRunner
+from .runner import TextTestRunner, TextTestResult
+
+# deprecated
+_TextTestResult = TextTestResult
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index e8ebc90..66f414f 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -216,18 +216,15 @@
         return result.TestResult()
 
     def shortDescription(self):
-        """Returns both the test method name and first line of its docstring.
+        """Returns a one-line description of the test, or None if no
+        description has been provided.
 
-        If no docstring is given, only returns the method name.
+        The default implementation of this method returns the first line of
+        the specified test method's docstring.
         """
-        desc = str(self)
-        doc_first_line = None
+        doc = self._testMethodDoc
+        return doc and doc.split("\n")[0].strip() or None
 
-        if self._testMethodDoc:
-            doc_first_line = self._testMethodDoc.split("\n")[0].strip()
-        if doc_first_line:
-            desc = '\n'.join((desc, doc_first_line))
-        return desc
 
     def id(self):
         return "%s.%s" % (util.strclass(self.__class__), self._testMethodName)
@@ -488,7 +485,6 @@
     assertNotEquals = assertNotEqual
     assertAlmostEquals = assertAlmostEqual
     assertNotAlmostEquals = assertNotAlmostEqual
-    assert_ = assertTrue
 
     # These fail* assertion method names are pending deprecation and will
     # be a DeprecationWarning in 3.2; http://bugs.python.org/issue2578
@@ -505,6 +501,7 @@
     failUnlessAlmostEqual = _deprecate(assertAlmostEqual)
     failIfAlmostEqual = _deprecate(assertNotAlmostEqual)
     failUnless = _deprecate(assertTrue)
+    assert_ = _deprecate(assertTrue)
     failUnlessRaises = _deprecate(assertRaises)
     failIf = _deprecate(assertFalse)
 
diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py
index 3e32eb0..4538304 100644
--- a/Lib/unittest/result.py
+++ b/Lib/unittest/result.py
@@ -27,7 +27,7 @@
 
     def startTest(self, test):
         "Called when the given test is about to be run"
-        self.testsRun = self.testsRun + 1
+        self.testsRun += 1
 
     def startTestRun(self):
         """Called once before any tests are executed.
@@ -36,8 +36,7 @@
         """
 
     def stopTest(self, test):
-        "Called when the given test has been run"
-        pass
+        """Called when the given test has been run"""
 
     def stopTestRun(self):
         """Called once after all tests are executed.
diff --git a/Lib/unittest/runner.py b/Lib/unittest/runner.py
index 3afbc0e..cbec296 100644
--- a/Lib/unittest/runner.py
+++ b/Lib/unittest/runner.py
@@ -22,7 +22,7 @@
         self.write('\n') # text-mode streams translate to \r\n if needed
 
 
-class _TextTestResult(result.TestResult):
+class TextTestResult(result.TestResult):
     """A test result class that can print formatted text results to a stream.
 
     Used by TextTestRunner.
@@ -31,27 +31,28 @@
     separator2 = '-' * 70
 
     def __init__(self, stream, descriptions, verbosity):
-        super(_TextTestResult, self).__init__()
+        super(TextTestResult, self).__init__()
         self.stream = stream
         self.showAll = verbosity > 1
         self.dots = verbosity == 1
         self.descriptions = descriptions
 
     def getDescription(self, test):
-        if self.descriptions:
-            return test.shortDescription() or str(test)
+        doc_first_line = test.shortDescription()
+        if self.descriptions and doc_first_line:
+            return '\n'.join((str(test), doc_first_line))
         else:
             return str(test)
 
     def startTest(self, test):
-        super(_TextTestResult, self).startTest(test)
+        super(TextTestResult, self).startTest(test)
         if self.showAll:
             self.stream.write(self.getDescription(test))
             self.stream.write(" ... ")
             self.stream.flush()
 
     def addSuccess(self, test):
-        super(_TextTestResult, self).addSuccess(test)
+        super(TextTestResult, self).addSuccess(test)
         if self.showAll:
             self.stream.writeln("ok")
         elif self.dots:
@@ -59,7 +60,7 @@
             self.stream.flush()
 
     def addError(self, test, err):
-        super(_TextTestResult, self).addError(test, err)
+        super(TextTestResult, self).addError(test, err)
         if self.showAll:
             self.stream.writeln("ERROR")
         elif self.dots:
@@ -67,7 +68,7 @@
             self.stream.flush()
 
     def addFailure(self, test, err):
-        super(_TextTestResult, self).addFailure(test, err)
+        super(TextTestResult, self).addFailure(test, err)
         if self.showAll:
             self.stream.writeln("FAIL")
         elif self.dots:
@@ -75,7 +76,7 @@
             self.stream.flush()
 
     def addSkip(self, test, reason):
-        super(_TextTestResult, self).addSkip(test, reason)
+        super(TextTestResult, self).addSkip(test, reason)
         if self.showAll:
             self.stream.writeln("skipped {0!r}".format(reason))
         elif self.dots:
@@ -83,7 +84,7 @@
             self.stream.flush()
 
     def addExpectedFailure(self, test, err):
-        super(_TextTestResult, self).addExpectedFailure(test, err)
+        super(TextTestResult, self).addExpectedFailure(test, err)
         if self.showAll:
             self.stream.writeln("expected failure")
         elif self.dots:
@@ -91,7 +92,7 @@
             self.stream.flush()
 
     def addUnexpectedSuccess(self, test):
-        super(_TextTestResult, self).addUnexpectedSuccess(test)
+        super(TextTestResult, self).addUnexpectedSuccess(test)
         if self.showAll:
             self.stream.writeln("unexpected success")
         elif self.dots:
@@ -118,13 +119,18 @@
     It prints out the names of tests as they are run, errors as they
     occur, and a summary of the results at the end of the test run.
     """
-    def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1):
+    resultclass = TextTestResult
+
+    def __init__(self, stream=sys.stderr, descriptions=True, verbosity=1,
+                 resultclass=None):
         self.stream = _WritelnDecorator(stream)
         self.descriptions = descriptions
         self.verbosity = verbosity
+        if resultclass is not None:
+            self.resultclass = resultclass
 
     def _makeResult(self):
-        return _TextTestResult(self.stream, self.descriptions, self.verbosity)
+        return self.resultclass(self.stream, self.descriptions, self.verbosity)
 
     def run(self, test):
         "Run the given test case or test suite."
