Index: django/test/client.py
===================================================================
--- django/test/client.py	(revision 4223)
+++ django/test/client.py	(working copy)
@@ -1,6 +1,8 @@
 from cStringIO import StringIO
+import sys
 from django.core.handlers.base import BaseHandler
 from django.core.handlers.wsgi import WSGIRequest
+from django.core.signals import got_request_exception
 from django.dispatch import dispatcher
 from django.http import urlencode, SimpleCookie
 from django.test import signals
@@ -98,6 +100,7 @@
         self.handler = ClientHandler()
         self.defaults = defaults
         self.cookie = SimpleCookie()
+        self.exc_info = None
 
     def request(self, **request):
         """
@@ -106,6 +109,7 @@
         Assumes defaults for the query environment, which can be overridden
         using the arguments to the request.
         """
+        self.exc_info = None
 
         environ = {
             'HTTP_COOKIE':      self.cookie,
@@ -126,6 +130,9 @@
         on_template_render = curry(store_rendered_templates, data)
         dispatcher.connect(on_template_render, signal=signals.template_rendered)
 
+        # Capture exceptions created by the handler
+        dispatcher.connect(self.store_exc_info, signal=got_request_exception)
+
         response = self.handler(environ)
 
         # Add any rendered template detail to the response
@@ -143,6 +150,10 @@
         if response.cookies:
             self.cookie.update(response.cookies)
 
+        # Look for a signalled exception and reraise it
+        if self.exc_info:
+            raise self.exc_info[1], None, self.exc_info[2]
+
         return response
 
     def get(self, path, data={}, **extra):
@@ -214,3 +242,6 @@
 
         # Since we are logged in, request the actual page again
         return self.get(path)
+
+    def store_exc_info(self, *args, **kwargs):
+        self.exc_info = sys.exc_info()
