diff --git a/django/contrib/auth/tests/context_processors.py b/django/contrib/auth/tests/context_processors.py
index 49172c6..224e63d 100644
--- a/django/contrib/auth/tests/context_processors.py
+++ b/django/contrib/auth/tests/context_processors.py
@@ -1,9 +1,10 @@
 import os
 
-from django.conf import settings
+from django.conf import settings, global_settings
 from django.contrib.auth import authenticate
 from django.db.models import Q
 from django.test import TestCase
+from django.test.utils import override_settings
 
 
 class AuthContextProcessorTests(TestCase):
@@ -13,15 +14,7 @@ class AuthContextProcessorTests(TestCase):
     urls = 'django.contrib.auth.tests.urls'
     fixtures = ['context-processors-users.xml']
 
-    def setUp(self):
-        self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
-        settings.TEMPLATE_DIRS = (
-            os.path.join(os.path.dirname(__file__), 'templates'),
-        )
-
-    def tearDown(self):
-        settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
-
+    @override_settings(MIDDLEWARE_CLASSES=global_settings.MIDDLEWARE_CLASSES)
     def test_session_not_accessed(self):
         """
         Tests that the session is not accessed simply by including
@@ -86,3 +79,9 @@ class AuthContextProcessorTests(TestCase):
         # See bug #12060
         self.assertEqual(response.context['user'], user)
         self.assertEqual(user, response.context['user'])
+
+AuthContextProcessorTests = override_settings(
+    TEMPLATE_DIRS = (
+        os.path.join(os.path.dirname(__file__), 'templates'),
+    ),
+)(AuthContextProcessorTests)
diff --git a/django/contrib/auth/tests/forms.py b/django/contrib/auth/tests/forms.py
index 429967c..4638a96 100644
--- a/django/contrib/auth/tests/forms.py
+++ b/django/contrib/auth/tests/forms.py
@@ -4,12 +4,19 @@ from django.core import mail
 from django.contrib.auth.models import User
 from django.contrib.auth.forms import UserCreationForm, AuthenticationForm,  PasswordChangeForm, SetPasswordForm, UserChangeForm, PasswordResetForm
 from django.test import TestCase
+from django.test.utils import override_settings
 
 
-class UserCreationFormTest(TestCase):
-
+class FormTestCase(TestCase):
     fixtures = ['authtestdata.json']
 
+FormTestCase = override_settings(
+    LANGUAGE_CODE = 'en',
+)(FormTestCase)
+
+
+class UserCreationFormTest(FormTestCase):
+
     def test_user_already_exists(self):
         data = {
             'username': 'testclient',
@@ -77,9 +84,7 @@ class UserCreationFormTest(TestCase):
         self.assertEqual(repr(u), '<User: jsmith@example.com>')
 
 
-class AuthenticationFormTest(TestCase):
-
-    fixtures = ['authtestdata.json']
+class AuthenticationFormTest(FormTestCase):
 
     def test_invalid_username(self):
         # The user submits an invalid username.
@@ -116,9 +121,7 @@ class AuthenticationFormTest(TestCase):
         self.assertEqual(form.non_field_errors(), [])
 
 
-class SetPasswordFormTest(TestCase):
-
-    fixtures = ['authtestdata.json']
+class SetPasswordFormTest(FormTestCase):
 
     def test_password_verification(self):
         # The two new passwords do not match.
@@ -142,9 +145,7 @@ class SetPasswordFormTest(TestCase):
         self.assertTrue(form.is_valid())
 
 
-class PasswordChangeFormTest(TestCase):
-
-    fixtures = ['authtestdata.json']
+class PasswordChangeFormTest(FormTestCase):
 
     def test_incorrect_password(self):
         user = User.objects.get(username='testclient')
@@ -190,9 +191,8 @@ class PasswordChangeFormTest(TestCase):
         self.assertEqual(PasswordChangeForm(user, {}).fields.keys(),
                          ['old_password', 'new_password1', 'new_password2'])
 
-class UserChangeFormTest(TestCase):
 
-    fixtures = ['authtestdata.json']
+class UserChangeFormTest(FormTestCase):
 
     def test_username_validity(self):
         user = User.objects.get(username='testclient')
@@ -218,9 +218,7 @@ class UserChangeFormTest(TestCase):
         form = MyUserForm({})
 
 
-class PasswordResetFormTest(TestCase):
-
-    fixtures = ['authtestdata.json']
+class PasswordResetFormTest(FormTestCase):
 
     def create_dummy_user(self):
         """creates a user and returns a tuple
diff --git a/django/contrib/auth/tests/views.py b/django/contrib/auth/tests/views.py
index 9fccb3e..1da772e 100644
--- a/django/contrib/auth/tests/views.py
+++ b/django/contrib/auth/tests/views.py
@@ -6,14 +6,13 @@ import urllib
 from django.conf import settings
 from django.contrib.auth import SESSION_KEY, REDIRECT_FIELD_NAME
 from django.contrib.auth.forms import AuthenticationForm
-from django.contrib.sites.models import Site, RequestSite
 from django.contrib.auth.models import User
-from django.core.urlresolvers import NoReverseMatch
-from django.test import TestCase
+from django.contrib.sites.models import Site, RequestSite
 from django.core import mail
-from django.core.urlresolvers import reverse
+from django.core.urlresolvers import reverse, NoReverseMatch
 from django.http import QueryDict
-
+from django.test import TestCase
+from django.test.utils import override_settings
 
 class AuthViewsTestCase(TestCase):
     """
@@ -22,21 +21,6 @@ class AuthViewsTestCase(TestCase):
     fixtures = ['authtestdata.json']
     urls = 'django.contrib.auth.tests.urls'
 
-    def setUp(self):
-        self.old_LANGUAGES = settings.LANGUAGES
-        self.old_LANGUAGE_CODE = settings.LANGUAGE_CODE
-        settings.LANGUAGES = (('en', 'English'),)
-        settings.LANGUAGE_CODE = 'en'
-        self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
-        settings.TEMPLATE_DIRS = (
-            os.path.join(os.path.dirname(__file__), 'templates'),
-        )
-
-    def tearDown(self):
-        settings.LANGUAGES = self.old_LANGUAGES
-        settings.LANGUAGE_CODE = self.old_LANGUAGE_CODE
-        settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
-
     def login(self, password='password'):
         response = self.client.post('/login/', {
             'username': 'testclient',
@@ -47,6 +31,14 @@ class AuthViewsTestCase(TestCase):
         self.assertTrue(response['Location'].endswith(settings.LOGIN_REDIRECT_URL))
         self.assertTrue(SESSION_KEY in self.client.session)
 
+AuthViewsTestCase = override_settings(
+    LANGUAGES = (('en', 'English'),),
+    LANGUAGE_CODE = 'en',
+    TEMPLATE_DIRS = (
+        os.path.join(os.path.dirname(__file__), 'templates'),
+    )
+)(AuthViewsTestCase)
+
 
 class AuthViewNamedURLTests(AuthViewsTestCase):
     urls = 'django.contrib.auth.urls'
diff --git a/django/test/utils.py b/django/test/utils.py
index 87f2311..dbfac7c 100644
--- a/django/test/utils.py
+++ b/django/test/utils.py
@@ -6,7 +6,7 @@ from django.core import mail
 from django.test.signals import template_rendered, setting_changed
 from django.template import Template, loader, TemplateDoesNotExist
 from django.template.loaders import cached
-from django.utils.translation import deactivate
+from django.utils.translation import activate, deactivate
 from django.utils.functional import wraps
 
 
@@ -186,6 +186,7 @@ class override_settings(object):
     def __init__(self, **kwargs):
         self.options = kwargs
         self.wrapped = settings._wrapped
+        self.old_language_code = None
 
     def __enter__(self):
         self.enable()
@@ -218,7 +219,12 @@ class override_settings(object):
         override = OverrideSettingsHolder(settings._wrapped)
         for key, new_value in self.options.items():
             setattr(override, key, new_value)
+            if key == 'LANGUAGE_CODE':
+                self.old_language_code = settings._wrapped.LANGUAGE_CODE
+                activate(new_value)
         settings._wrapped = override
 
     def disable(self):
         settings._wrapped = self.wrapped
+        if self.old_language_code is not None:
+            activate(self.old_language_code)
