diff --git a/trac/admin/tests/console.py b/trac/admin/tests/console.py
--- a/trac/admin/tests/console.py
+++ b/trac/admin/tests/console.py
@@ -132,7 +132,7 @@
             sys.stderr = _err
             sys.stdout = _out
             if expect_exception:
-                tb = traceback.format_exc()
+                tb = ''.join(traceback.format_exception(*sys.exc_info()))
                 message = tb.splitlines()[-1] + '\n'
                 return -1, message
             raise
diff --git a/trac/mimeview/tests/api.py b/trac/mimeview/tests/api.py
--- a/trac/mimeview/tests/api.py
+++ b/trac/mimeview/tests/api.py
@@ -108,6 +108,9 @@
         self.assertEqual(Converter2(self.env), conversions[2][-1])
 
 class GroupLinesTestCase(unittest.TestCase):
+    
+    if not hasattr(unittest.TestCase, "assertTrue"):
+        assertTrue = unittest.TestCase.failUnless   # Python 2.3 compatibility
 
     def test_empty_stream(self):
         # FIXME: this currently fails
diff --git a/trac/mimeview/tests/patch.py b/trac/mimeview/tests/patch.py
--- a/trac/mimeview/tests/patch.py
+++ b/trac/mimeview/tests/patch.py
@@ -27,6 +27,9 @@
 
 
 class PatchRendererTestCase(unittest.TestCase):
+    
+    if not hasattr(unittest.TestCase, "assertTrue"):
+        assertTrue = unittest.TestCase.failUnless   # Python 2.3 compatibility
 
     def setUp(self):
         env = EnvironmentStub(enable=[Chrome, PatchRenderer])
diff --git a/trac/mimeview/tests/pygments.py b/trac/mimeview/tests/pygments.py
--- a/trac/mimeview/tests/pygments.py
+++ b/trac/mimeview/tests/pygments.py
@@ -34,6 +34,9 @@
 
 class PygmentsRendererTestCase(unittest.TestCase):
 
+    if not hasattr(unittest.TestCase, "assertTrue"):
+        assertTrue = unittest.TestCase.failUnless   # Python 2.3 compatibility
+
     def setUp(self):
         self.env = EnvironmentStub(enable=[Chrome, PygmentsRenderer])
         self.pygments = Mimeview(self.env).renderers[0]
diff --git a/trac/test.py b/trac/test.py
--- a/trac/test.py
+++ b/trac/test.py
@@ -123,10 +123,16 @@
             for test in self._tests:
                 if hasattr(test, 'setFixture'):
                     test.setFixture(self.fixture)
-        unittest.TestSuite.run(self, result)
+        for test in self._tests:    # Content of unittest.TestSuite.run()
+            if result.shouldStop:   # copied here for Python 2.3 compatibility
+                break
+            test(result)
         self.tearDown()
         return result
 
+    def __call__(self, *args, **kwds):      # Python 2.3 compatibility
+        return self.run(*args, **kwds)
+
 
 class TestCaseSetup(unittest.TestCase):
     def setFixture(self, fixture):

