.. slideconf::
:theme: single-level
- There are Unit Tests and there are Integration tests
- Unit Tests should not rely on external services
- Unit Tests should be fast
- Django bundles
unittest2
as django.utils.unittest
import django.http
import django.utils.unittest as unittest2
class LocaleMiddlewareTests(unittest2.TestCase):
def test_request_not_processed(self):
middleware = LocaleMiddle()
response = django.http.HttpResponse()
middleware.process_response(none, response)
self.assertFalse(response.cookies)
- Django TestClient acts like a browser. Sort of.
- Allows you to make a request against your application and inspect
the response
- The TestClient is slow (compared to plain unit tests)
.. testcode::
from django.test.client import Client
c = Client()
response = c.get('/login')
self.assertEqual(response.status_code, 200)
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
- Django 1.3 introduced
RequestFactory
, with an API similar to
Test Client
- Easy way to generate
Request
objects, which can be passed to
views
- Note that middleware is not run on these Requests
- Django only looks in apps with
models.py
for tests
$ ./manage.py test
- Easy to replace the test runner with something like
nose
if you
so desire