読者です 読者をやめる 読者になる 読者になる

テスト用のRequestFactoryを使ってみる

Python Django

Djangoユニットテストを書く際にテストクライアントを使うことができますが、これはurls.pyを用意しないと使えません。
しかし、ビュー関数のみをテストする場合、Requestクラスのオブジェクトが必要になります。
django.test.client.RequestFactoryを使えば、GETやPOSTメソッドのRequestオブジェクトを簡単に生成できます。
試したバージョンは、Python2.7.2、Django1.4。

views.py

from django.http import HttpResponse


def my_view(request):
    return HttpResponse("OK")

このmy_view関数をテストする。

tests.py

from django.test import TestCase
from django.test.client import RequestFactory

from testapp.views import my_view


class MyViewTest(TestCase):
    def test_get_request(self):
        rf = RequestFactory()
        # /test/ をGETメソッドでリクエストした場合のオブジェクト
        request = rf.get('/test/')
        # view関数呼び出し
        response = my_view(request)
        # 結果を検証
        self.assertEqual(response.content, "OK")

2012/5/14追記

後で気づいたんだけど、テスト対象のコード例があんまり良くないね。この例だとrequestは何でもいい。実際にはrequestの内容を使ってフォーム生成とか各種値を読み取ったりしてるので、そう読み替えてください。