{"title":"テストツール","version":"6.1","locale":"ja","docname":"topics/testing/tools","url":"/ja/6.1/topics/testing/tools/","canonical":"https://djangodocs.dev/ja/6.1/topics/testing/tools/","summary":"Django は、テストを書くのに便利なツールをいくつか提供しています。 テストクライアント Link to this heading # テストクライアントは、ダミーのウェブブラウザとして振る舞う Python のクラスです。これを使えば、ビューと Django…","html":"<h1>テストツール<a class=\"heading-anchor\" href=\"#testing-tools\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django は、テストを書くのに便利なツールをいくつか提供しています。</p>\n<section id=\"the-test-client\">\n<span id=\"test-client\"></span><h2>テストクライアント<a class=\"heading-anchor\" href=\"#the-test-client\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>テストクライアントは、ダミーのウェブブラウザとして振る舞う Python のクラスです。これを使えば、ビューと Django で作ったアプリケーションとの関係をプログラムから自動でテストできるようになります。</p>\n<p>テストクライアントでは、次のようなことができます。</p>\n<ul class=\"simple\">\n<li><p>ある URL に対する GET および POST リクエストのシミュレートと、その結果の観察。低レベルの HTTP (レスポンスのヘッダーやステータスコードなど) から、ページのコンテンツまで、あらゆるレスポンスの内容を調査できます。</p></li>\n<li><p>一連の (好きな数の) リダイレクトを見て、その各ステップごとに URL とステータスコードをチェックする。</p></li>\n<li><p>指定したリクエストが特定の Django テンプレートによってレンダリングされたとき、テンプレートのコンテキストが正しく特定の値を含んでいるかどうかをテストする。</p></li>\n</ul>\n<p>テストクライアントは <a class=\"reference external\" href=\"https://www.selenium.dev/\">Selenium</a> や他の &quot;ブラウザ内 (in-browser)&quot; フレームワークの代替を目指すものではないことに注意してください。Django のテストクライアントの目的は別の点にあります。つまり、</p>\n<ul class=\"simple\">\n<li><p>Django のテストクライアントは、正しいテンプレートがレンダリングされ、そのテンプレートが正しいコンテキストデータをちゃんと渡しているのかをチェックするために使います。</p></li>\n<li><p>ビューの機能を直接テストするには、<a class=\"reference internal\" href=\"/ja/6.1/topics/testing/advanced/#django.test.RequestFactory\" title=\"django.test.RequestFactory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestFactory</span></code></a> を使用して、ルーティングとミドルウェアのレイヤーをバイパスしてください。</p></li>\n<li><p><a class=\"reference external\" href=\"https://www.selenium.dev/\">Selenium</a> などのブラウザー内フレームワークは、HTML の <em>レンダリング</em> や、ウェブページの <em>振る舞い</em> 、つまり JavaScript の機能性をテストするために使います。また、Django はこれらのフレームワーク向けの特別なサポートも提供しています。詳細については、<a class=\"reference internal\" href=\"#django.test.LiveServerTestCase\" title=\"django.test.LiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code></a> のセクションを読んでください。</p></li>\n</ul>\n<p>包括的なテストスイートを実現するには、これらすべてのタイプのテストを組み合わせて行うべきです。</p>\n<section id=\"overview-and-a-quick-example\">\n<h3>概要と簡単な例<a class=\"heading-anchor\" href=\"#overview-and-a-quick-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テストクライアントを使うには、<code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.Client</span></code> からインスタンスを作り、次のようにウェブページを取得します。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;john&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;smith&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span>\n<span class=\"go\">200</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span>\n<span class=\"go\">b&#39;&lt;!DOCTYPE html...&#39;</span>\n</code></pre></div>\n<p>この例が示唆しているように、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> のインスタンスは、Python のインタラクティブなインタプリタ上のセッションからでも作ることができます。</p>\n<p>テストクライアントの動作の仕方に関して、いくつか大切な注意点があります。</p>\n<ul>\n<li><p>テストクライアントが動作するために、ウェブサーバーが動作している必要は <em>ありません</em> 。実際、ウェブサーバーを一切起動せずに動作するのです！ HTTP のオーバーヘッドを避けて、Django フレームワークと直接やりとりすることでこれを実現しています。これにより、高速なユニットテストが可能になっています。</p></li>\n<li><p>ページの取得時には、ドメイン全体ではなく、URL の <em>path</em> だけを指定することを覚えておいてください。たとえば、次は正しいです。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>しかし、これは間違いです。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;https://www.example.com/login/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>テストクライアントには、自分の Django プロジェクト以外のウェブページを取得する機能はありません。他のウェブページが必要な場合には、 <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.html#module-urllib\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">urllib</span></code></a> などの Python のスタンダードライブラリモジュールを利用してください。</p>\n</li>\n<li><p>URL を解決するとき、テストクライアントは <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ROOT_URLCONF</span></code></a> 設定で指定されたすべての URLconf を使用します。</p></li>\n<li><p>上の例では Python のインタラクティブなインタプリタ上でも動作するはずですが、テストクライアントの一部の機能、特にテンプレート関係の機能は、 <em>テストの実行中</em> にしか使えないことがあります。</p>\n<p>というのも、Django のテストランナーは、与えられたビューによって読み込まれるテンプレートを決定する時に、ちょっとした黒魔術を使っています。この黒魔術 (具体的には Django のテンプレートシステムに対してメモリ上でパッチを当てています) は、テストの実行中にだけ使われるのです。</p>\n</li>\n<li><p>デフォルトでは、テストクライアントはサイト上でのすべての CSRF チェックを無効にしています。</p>\n<p>何らかの理由でテストクライアントに CSRF チェックを実行して <em>ほしい</em> ときには、CSRF チェックの実行を強制するテストクライアントのインスタンスを作ることができます。これには、クライアントを作る時に次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">enforce_csrf_checks</span></code> 引数を渡します。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">csrf_client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">(</span><span class=\"n\">enforce_csrf_checks</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"making-requests\">\n<h3>リクエストの作成<a class=\"heading-anchor\" href=\"#making-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>リクエストの作成には、<code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.Client</span></code> クラスを使います。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Client</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">enforce_csrf_checks</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raise_request_exception</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">json_encoder</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DjangoJSONEncoder</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">defaults</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>テスト用の HTTP クライアントです。いくつかの引数で動作をカスタマイズできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code> にはリクエストごとに送信されるデフォルトのヘッダを指定できます。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">User-Agent</span></code> ヘッダの場合:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">(</span><span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;user-agent&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;curl/7.79.1&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> を使用すると、すべてのリクエストに設定されるデフォルトのクエリ文字列を指定できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Defaults</span></code> 内の任意のキーワード引数には WSGI <span class=\"target\" id=\"index-6\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-3333/#environ-variables\"><strong>環境変数</strong></a> を指定します。例えば、スクリプト名の場合:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">(</span><span class=\"n\">SCRIPT_NAME</span><span class=\"o\">=</span><span class=\"s2\">&quot;/app/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> プレフィックスで始まるキーワード引数がヘッダーとして設定されますが、可読性のために <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code> パラメーターの使用を推奨します。</p>\n</aside>\n<p>The values from the <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> keyword\narguments passed to <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>,\n<a class=\"reference internal\" href=\"#django.test.Client.post\" title=\"django.test.Client.post\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post()</span></code></a>, etc. have precedence over\nthe defaults passed to the class constructor.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">enforce_csrf_checks</span></code> 引数を使うと、CSRF プロテクションのテストが実行できます (上の説明を参照)。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">raise_request_exception</span></code> 引数を指定することで、リクエスト中に発生した例外をテストでも発生させるかどうかを制御できます。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">json_encoder</span></code> 引数を指定すると、 <a class=\"reference internal\" href=\"#django.test.Client.post\" title=\"django.test.Client.post\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post()</span></code></a> に記述されているJSONシリアライズ用のカスタムJSONエンコーダを指定できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> インスタンスを一度作れば、以下のメソッドを自由に使うことができます。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.get\">\n<span class=\"sig-name descname\"><span class=\"pre\">get</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.get\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して GET リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトについては、下のセクションにドキュメントされています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> に渡された辞書のキーと値のペアは、クエリ文字列の設定に使用されます。例えば、次のように使います。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/details/&quot;</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>引数の評価の結果、次の GET リクエストの実行と等価になります。</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>/customers/details/?name=fred&amp;age=7\n</code></pre></div>\n<p>これらのパラメータを <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> パラメータに渡すことも可能です。しかし、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> を使用する方が推奨されます。なぜなら、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> はすべてのHTTPメソッドで動作するからです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code> 引数は、リクエスト時に送信されるヘッダーの指定に使われます。たとえば、次のコード</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;/customers/details/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;accept&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;application/json&quot;</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...will send the HTTP header <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_ACCEPT</span></code> to the details view, which\nis a good way to test code paths that use the\n<a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpRequest.accepts\" title=\"django.http.HttpRequest.accepts\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">django.http.HttpRequest.accepts()</span></code></a> method.</p>\n<p>任意のキーワード引数には、WSGI <span class=\"target\" id=\"index-7\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-3333/#environ-variables\"><strong>環境変数</strong></a> を指定します。たとえば、スクリプト名を設定するヘッダの場合:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">SCRIPT_NAME</span><span class=\"o\">=</span><span class=\"s2\">&quot;/app/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>GET の引数がすでに URL エンコードされた形式である場合は、data 引数の代わりにエンコード済みの文字列を使うことができます。たとえば、先ほどの GET リクエストは次のようにも書けます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/details/?name=fred&amp;age=7&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>エンコード済みのGETデータを含むURLと <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> 引数の両方を指定した場合、これらの引数が優先されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を与えると、クライアントはすべてのリダイレクトを辿り、途中の URL とステータスコードのタプルが、レスポンスオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_chain</span></code> 属性に追加されてゆきます。</p>\n<p>たとえば、URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/redirect_me/</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">/next/</span></code> にリダイレクトし、それがさらに <code class=\"docutils literal notranslate\"><span class=\"pre\">/final/</span></code> にリダイレクトするような場合には、<code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_chain</span></code> は次のような値になります。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/redirect_me/&quot;</span><span class=\"p\">,</span> <span class=\"n\">follow</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">redirect_chain</span>\n<span class=\"go\">[(&#39;http://testserver/next/&#39;, 302), (&#39;http://testserver/final/&#39;, 302)]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定すると、クライアントは HTTPS リクエストをエミュレートします。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.post\">\n<span class=\"sig-name descname\"><span class=\"pre\">post</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">MULTIPART_CONTENT</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.post\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して POST リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトについては、下のセクションにドキュメントされています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> ディクショナリ内の key-value ペアは、POST データを送信するのに使われます。例えば、次の例では、</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;passwd&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>引数の評価の結果、次の URL へ POST リクエストが行われます。</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>/login/\n</code></pre></div>\n<p>リクエストで送られる POST データは次のものになります。</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>name=fred&amp;passwd=secret\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> に <em class=\"mimetype\">application/json</em> を指定すると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> が dict、リスト、タプルの場合、 <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.dumps\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">json.dumps()</span></code></a> を使ってシリアライズされます。デフォルトでは <a class=\"reference internal\" href=\"/ja/6.1/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoJSONEncoder</span></code></a> でシリアライズを行いますが、 <a class=\"reference internal\" href=\"#django.test.Client\" title=\"django.test.Client\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Client</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">json_encoder</span></code> 引数を指定することでオーバーライドできます。このシリアライズは <a class=\"reference internal\" href=\"#django.test.Client.put\" title=\"django.test.Client.put\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">put()</span></code></a>, <a class=\"reference internal\" href=\"#django.test.Client.patch\" title=\"django.test.Client.patch\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">patch()</span></code></a>, <a class=\"reference internal\" href=\"#django.test.Client.delete\" title=\"django.test.Client.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> リクエストでも行われます。</p>\n<p>もし他の <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> (たとえば、XML データの場合は <em class=\"mimetype\">text/xml</em>) を与えると、<code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> のコンテンツは、HTTP の <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダーの中で <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> を使ったものとして、POST リクエストで送られます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> に値を渡さなかったときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> 内の値を <em class=\"mimetype\">multipart/form-data</em> のコンテンツタイプとして送信します。この場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> 内のkey-value ペアが multipart メッセージにえんこーどされ、POST データを生成するのに使われます。</p>\n<p>たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;</span></code> の複数の選択を指定する場合のように、特定のキーに対して複数の値を送信したいときは、必要なキーに対する値をリストまたはタプルとして与えます。たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> に次の値を与えれば、3つの選択した値を <code class=\"docutils literal notranslate\"><span class=\"pre\">choice</span></code> という名前のフィールドに対して送信できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"s2\">&quot;choices&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;a&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;b&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;d&quot;</span><span class=\"p\">]}</span>\n</code></pre></div>\n<p>ファイルの送信は特別なケースです。ファイルをPOSTするには、キーとしてファイルフィールド名を、値としてアップロードしたいファイルへのファイルハンドルを渡すだけで十分です。例えば、フォームに <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">attachment</span></code> のフィールドがあり、後者が <a class=\"reference internal\" href=\"/ja/6.1/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> の場合:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;wishlist.doc&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fp</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/wishes/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;attachment&quot;</span><span class=\"p\">:</span> <span class=\"n\">fp</span><span class=\"p\">})</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<p>また、ファイルのようなオブジェクト (例えば <a class=\"reference external\" href=\"https://docs.python.org/3/library/io.html#io.StringIO\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StringIO</span></code></a> や <a class=\"reference external\" href=\"https://docs.python.org/3/library/io.html#io.BytesIO\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BytesIO</span></code></a>) をファイルハンドルとして指定することもできます。もし <a class=\"reference internal\" href=\"/ja/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> にアップロードする場合、オブジェクトには <a class=\"reference internal\" href=\"/ja/6.1/ref/validators/#django.core.validators.validate_image_file_extension\" title=\"django.core.validators.validate_image_file_extension\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">validate_image_file_extension</span></code></a> バリデータを渡す <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> 属性が必要です。たとえば下記のようにします:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">io</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BytesIO</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">img</span> <span class=\"o\">=</span> <span class=\"n\">BytesIO</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"sa\">b</span><span class=\"s2\">&quot;GIF89a</span><span class=\"se\">\\x01\\x00\\x01\\x00\\x00\\x00\\x00</span><span class=\"s2\">!</span><span class=\"se\">\\xf9\\x04\\x01\\x00\\x00\\x00</span><span class=\"s2\">&quot;</span>\n<span class=\"gp\">... </span>    <span class=\"sa\">b</span><span class=\"s2\">&quot;</span><span class=\"se\">\\x00</span><span class=\"s2\">,</span><span class=\"se\">\\x00\\x00\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\x02\\x01\\x00\\x00</span><span class=\"s2\">&quot;</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">img</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;myimage.gif&quot;</span>\n</code></pre></div>\n<p>複数の <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code> の呼び出しに対して同じファイルハンドラを使う時には、post 間でファイルポインタを手動でリセットする必要があります。これを一番簡単に扱う方法は、上に示したように、ファイルが <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code> に与えられた後に手動でファイルを close することです。</p>\n<p>データが読み込めるように、正しい方法でファイルを開くようにする必要があります。これはつまり、画像ファイルなどのバイナリデータが含まれている場合には、<code class=\"docutils literal notranslate\"><span class=\"pre\">rb</span></code> (read binary、バイナリ読み込み) モードで開かなければならないということです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータは、<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> の場合と同じように動作します。</p>\n<p>POST でリクエストした URL にエンコード済みパラメータが含まれている場合には、これらのデータは request.GET データから利用できます。たとえば、次のようなリクエストを行った場合、</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;passwd&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">},</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;visitor&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;true&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このリクエストをハンドリングするビューでは、request.POST からはユーザー名とパスワードを取得し、request.GET からはユーザーが visitor であるかどうかを特定できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を与えると、クライアントはすべてのリダイレクトを辿り、途中の URL とステータスコードのタプルが、レスポンスオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_chain</span></code> 属性に追加されてゆきます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定すると、クライアントは HTTPS リクエストをエミュレートします。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.head\">\n<span class=\"sig-name descname\"><span class=\"pre\">head</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.head\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して HEAD リクエストを行い、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。このメソッドは <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> と同様に動作しますが、<code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータを含みます。ただし、メッセージボディは返されません。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.options\">\n<span class=\"sig-name descname\"><span class=\"pre\">options</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.options\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して OPTION リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。RESTful インターフェイスのテスト時に有用です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> が与えられると、request body として使われます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダーに設定されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータは、<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> の場合と同様に動作します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.put\">\n<span class=\"sig-name descname\"><span class=\"pre\">put</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.put\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して PUT リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。RESTful インターフェイスのテスト時に有用です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> が与えられると、request body として使われます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダーに設定されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータは、<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> の場合と同様に動作します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.patch\">\n<span class=\"sig-name descname\"><span class=\"pre\">patch</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.patch\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して PATCH リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。RESTful インターフェイスのテスト時に有用です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータは、<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> の場合と同様に動作します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.delete\">\n<span class=\"sig-name descname\"><span class=\"pre\">delete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して DELETE リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。RESTful インターフェイスのテスト時に有用です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> が与えられると、request body として使われます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダーに設定されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータは、<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> の場合と同様に動作します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.trace\">\n<span class=\"sig-name descname\"><span class=\"pre\">trace</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.trace\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> に対して TRACE リクエストを作り、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。診断のための調査をシミュレートするときに役に立ちます。</p>\n<p>他のリクエストメソッドとは違い、 <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> がキーワード引数にありません。 <span class=\"target\" id=\"index-8\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.3.8\"><strong>RFC 9110 Section 9.3.8</strong></a> に従うためです。そのため、TRACE リクエストには body を含むことが禁止されています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> パラメータは、<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> の場合と同様に動作します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.login\">\n<span class=\"sig-name descname\"><span class=\"pre\">login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">credentials</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.alogin\">\n<span class=\"sig-name descname\"><span class=\"pre\">alogin</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">credentials</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.alogin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">alogin()</span></code></p>\n<p>あなたのサイトが Django の <a class=\"reference internal\" href=\"/ja/6.1/topics/auth/\"><span class=\"doc\">認証システム</span></a> を使っていて、ユーザーのログインをテストしたければ、テストクライアントの <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> メソッドを使うことで、ユーザーがサイトにログインしたときの状況をシミュレートできます。</p>\n<p>このメソッドを呼ぶ事で、テストクライアントはログインに基づいてビューを形成するテストを行う上で必要なクッキーとセッション情報を全て持ちます。</p>\n<p>引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">credentials</span></code> の形式は利用している (<a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a> の設定値に定義されています) <a class=\"reference internal\" href=\"/ja/6.1/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">認証バックエンド</span></a> に依存します。Django によって提供される標準の認証バックエンド (<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>) を用いている場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">credentials</span></code> は利用者のユーザー名とパスワードであり、キーワード引数として渡されます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Now you can access a view that&#39;s only available to logged-in users.</span>\n</code></pre></div>\n<p>もし標準以外の認証バックエンドを利用している場合、このメソッドは異なった認証情報を必要とします。この値では利用している認証バックエンドの <code class=\"docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code> メソッドによって要求される認証情報が必要になります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the credentials were accepted and\nlogin was successful.</p>\n<p>Finally, you'll need to remember to create user accounts before you can\nuse this method. As we explained above, the test runner is executed\nusing a test database, which contains no users by default. As a result,\nuser accounts that are valid on your production site will not work\nunder test conditions. You'll need to create users as part of the test\nsuite -- either manually (using the Django model API) or with a test\nfixture. Remember that if you want your test user to have a password,\nyou can't set the user's password by setting the password attribute\ndirectly -- you must use the\n<a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/auth/#django.contrib.auth.models.User.set_password\" title=\"django.contrib.auth.models.User.set_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_password()</span></code></a> function to\nstore a correctly hashed password. Alternatively, you can use the\n<a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user\" title=\"django.contrib.auth.models.UserManager.create_user\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create_user()</span></code></a> helper\nmethod to create a new user with a correctly hashed password.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.force_login\">\n<span class=\"sig-name descname\"><span class=\"pre\">force_login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">backend</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.force_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.aforce_login\">\n<span class=\"sig-name descname\"><span class=\"pre\">aforce_login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">backend</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.aforce_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aforce_login()</span></code></p>\n<p>あなたのサイトが Django の <a class=\"reference internal\" href=\"/ja/6.1/topics/auth/\"><span class=\"doc\">認証システム</span></a> を使っている場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">force_login()</span></code> メソッドを使うと、ユーザがサイトにログインしたときの影響をシミュレーションできます。テストがユーザのログインを必要とするが、ユーザがどのようにログインしたかの詳細は重要ではない場合には <a class=\"reference internal\" href=\"#django.test.Client.login\" title=\"django.test.Client.login\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">login()</span></code></a> の代わりにこのメソッドを使用してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> とは異なり、このメソッドは認証と確認のステップを省略します。アクティブでないユーザ (<a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/auth/#django.contrib.auth.models.User.is_active\" title=\"django.contrib.auth.models.User.is_active\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_active=False</span></code></a>) もログインを許可され、ユーザの認証情報を提供する必要はありません。</p>\n<p>ユーザーには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> 引数の値（ドットで区切られたPythonパスの文字列であるべき）が <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> 属性としてセットされます。値が指定されていない場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.AUTHENTICATION_BACKENDS[0]</span></code> に設定されます。 <a class=\"reference internal\" href=\"#django.test.Client.login\" title=\"django.test.Client.login\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">login()</span></code></a> によって呼び出される <a class=\"reference internal\" href=\"/ja/6.1/topics/auth/default/#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a> 関数は、通常このようにユーザーにアノテーションを付けます。</p>\n<p>このメソッドは、高コストなパスワードハッシングアルゴリズムを回避するため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> よりも高速です。また、 <a class=\"reference internal\" href=\"/ja/6.1/topics/testing/overview/#speeding-up-tests-auth-hashers\"><span class=\"std std-ref\">テストに弱いハッシャーを使う</span></a> ことで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> 処理を高速にすることもできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.logout\">\n<span class=\"sig-name descname\"><span class=\"pre\">logout</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.logout\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.alogout\">\n<span class=\"sig-name descname\"><span class=\"pre\">alogout</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.alogout\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">alogout()</span></code></p>\n<p>あなたのサイトが Django の <a class=\"reference internal\" href=\"/ja/6.1/topics/auth/\"><span class=\"doc\">認証システム</span></a> を使っている場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">logout()</span></code> メソッドを使うと、ユーザがサイトからログアウトしたときの効果をシミュレートできます。</p>\n<p>このメソッドを呼び出した後、テストクライアントはすべてのクッキーとセッションデータをデフォルトにクリアします。それ以降のリクエストは <a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnonymousUser</span></code></a> から来たように見えるでしょう。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"testing-responses\">\n<h3>レスポンスのテスト<a class=\"heading-anchor\" href=\"#testing-responses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> および <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code> メソッドは、両方とも <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトを返します。この <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトは、Django のビューによって返される <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code> オブジェクトとは <em>異なるもの</em> であり、テストのレスポンスには、テストコードの検証に便利な追加データがいくつかあります。</p>\n<p>特に、<code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code> オブジェクトは以下の属性を持ちます:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Response</span></span><a class=\"heading-anchor\" href=\"#django.test.Response\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.client\">\n<span class=\"sig-name descname\"><span class=\"pre\">client</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>レスポンスの結果の元となるリクエストを作るために使われた、テストクライアントです。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.content\">\n<span class=\"sig-name descname\"><span class=\"pre\">content</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.content\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bytestring としてのレスポンスの本文です。ビューないしエラーメッセージによってレンダリングされる際の最終的なページコンテンツです。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.context\">\n<span class=\"sig-name descname\"><span class=\"pre\">context</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>テンプレートの <code class=\"docutils literal notranslate\"><span class=\"pre\">Context</span></code> インスタンスです。レスポンスの content を生成するテンプレートをレンダリングする際に使われます。</p>\n<p>描画されたページが複数のテンプレートを使っていた場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Context</span></code> オブジェクトのリストとなり、その順序はレンダリングされた順となります。</p>\n<p>レンダリングに使われるテンプレートの数にかかわらず、<code class=\"docutils literal notranslate\"><span class=\"pre\">[]</span></code> オペレータを使ってコンテキストの値を取り出すことができます。たとえば、コンテキストの変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> は以下のように取り出せます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;Arthur&#39;</span>\n</code></pre></div>\n<aside class=\"admonition-not-using-django-templates admonition\">\n<p class=\"admonition-title\">Django のテンプレートを使っていない？</p>\n<p>この属性は、<a class=\"reference internal\" href=\"/ja/6.1/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> バックエンドを使用しているときのみ格納されます。他のテンプレートエンジンを使っている場合、<a class=\"reference internal\" href=\"/ja/6.1/ref/template-response/#django.template.response.SimpleTemplateResponse.context_data\" title=\"django.template.response.SimpleTemplateResponse.context_data\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">context_data</span></code></a> がこの属性を扱うレスポンスの適切な選択肢となるでしょう。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.exc_info\">\n<span class=\"sig-name descname\"><span class=\"pre\">exc_info</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.exc_info\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ビュー中で発生した未処理の例外 (もし存在すれば) に関する情報を提供する3つの値のタプル。</p>\n<p>値は (type, value, traceback) であり、Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/sys.html#sys.exc_info\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">sys.exc_info()</span></code></a> が返すのと同じものです。それぞれの値の意味は以下のとおりです。</p>\n<ul class=\"simple\">\n<li><p><em>type</em>: 例外の型。</p></li>\n<li><p><em>value</em>: 例外インスタンス。</p></li>\n<li><p><em>traceback</em>: 例外がもともと発生した場所におけるロールスタックをカプセル化した、トレースバックオブジェクト。</p></li>\n</ul>\n<p>例外が発生しなかった場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">exc_info</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> になります。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.json\">\n<span class=\"sig-name descname\"><span class=\"pre\">json</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Response.json\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>JSON としてパースされた、レスポンスの本文です。追加のキーワード引数が <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.loads\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">json.loads()</span></code></a> に渡されます。たとえば、次のようになります。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">json</span><span class=\"p\">()[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;Arthur&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダが <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;application/json&quot;</span></code> ではない場合、レスポンスをパースする際に <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> が投げられます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.request\">\n<span class=\"sig-name descname\"><span class=\"pre\">request</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.request\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>レスポンスを機能させるリクエストデータです。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.wsgi_request\">\n<span class=\"sig-name descname\"><span class=\"pre\">wsgi_request</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.wsgi_request\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>レスポンスを生成したテストハンドラーによって生成された <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIRequest</span></code> インスタンス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.status_code\">\n<span class=\"sig-name descname\"><span class=\"pre\">status_code</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.status_code\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>レスポンスの HTTP ステータスで、数値です。 定義済みのコードの全リストは、<a class=\"reference external\" href=\"https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\">IANA status code registry</a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.templates\">\n<span class=\"sig-name descname\"><span class=\"pre\">templates</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.templates\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>最終コンテンツをレンダリングするときに使われる <code class=\"docutils literal notranslate\"><span class=\"pre\">Template</span></code> インスタンスのリストで、 レンダリングされる順となります。テンプレートがファイルから読み込まれる場合、テンプレートのファイル名を取得するためには、リスト内の各テンプレートに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">template.name</span></code> を使ってください (名前は <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin/index.html'</span></code> のような文字列となります)。</p>\n<aside class=\"admonition-not-using-django-templates admonition\">\n<p class=\"admonition-title\">Django のテンプレートを使っていない？</p>\n<p>この属性は、<a class=\"reference internal\" href=\"/ja/6.1/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> バックエンドを使用しているときのみ格納されます。他のテンプレートを知使っている場合、<a class=\"reference internal\" href=\"/ja/6.1/ref/template-response/#django.template.response.SimpleTemplateResponse.template_name\" title=\"django.template.response.SimpleTemplateResponse.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">template_name</span></code></a> が、レンダリングに使われるテンプレートの名前のみが必要な場合の適切な代替策となるでしょう。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.resolver_match\">\n<span class=\"sig-name descname\"><span class=\"pre\">resolver_match</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.resolver_match\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>レスポンスに対する <a class=\"reference internal\" href=\"/ja/6.1/ref/urlresolvers/#django.urls.ResolverMatch\" title=\"django.urls.ResolverMatch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ResolverMatch</span></code></a> のインスタンスです。たとえば、次のようにレスポンスを提供するビューを検証するために <a class=\"reference internal\" href=\"/ja/6.1/ref/urlresolvers/#django.urls.ResolverMatch.func\" title=\"django.urls.ResolverMatch.func\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">func</span></code></a> 属性を使えます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># my_view here is a function based view.</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">resolver_match</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">my_view</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Class-based views need to compare the view_class, as the</span>\n<span class=\"c1\"># functions generated by as_view() won&#39;t be equal.</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIs</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">resolver_match</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"o\">.</span><span class=\"n\">view_class</span><span class=\"p\">,</span> <span class=\"n\">MyView</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>指定された URL が見つからない場合、この属性にアクセスすると <a class=\"reference internal\" href=\"/ja/6.1/ref/exceptions/#django.urls.Resolver404\" title=\"django.urls.Resolver404\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">Resolver404</span></code></a> 例外が投げられます。</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>通常のレスポンスと同様に、<a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse.headers\" title=\"django.http.HttpResponse.headers\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">HttpResponse.headers</span></code></a> 経由でヘッダにアクセスできます。たとえば、レスポンスの content type は、<code class=\"docutils literal notranslate\"><span class=\"pre\">response.headers['Content-Type']</span></code> を使って決定できます。</p>\n</section>\n<section id=\"exceptions\">\n<h3>例外<a class=\"heading-anchor\" href=\"#exceptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>例外を発生させるビューをテストクライアントで指定し、<code class=\"docutils literal notranslate\"><span class=\"pre\">Client.raise_request_exception</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> である場合、例外はテストケース内で可視化されます。その後、標準の <code class=\"docutils literal notranslate\"><span class=\"pre\">try</span> <span class=\"pre\">...</span> <span class=\"pre\">except</span></code> ブロックを使うか、<a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaises()</span></code></a> で例外をテストできます。</p>\n<p>テストクライアントに可視化されない唯一の例外は、<a class=\"reference internal\" href=\"/ja/6.1/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Http404</span></code></a>、<a class=\"reference internal\" href=\"/ja/6.1/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a>、<a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#SystemExit\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">SystemExit</span></code></a>、<a class=\"reference internal\" href=\"/ja/6.1/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code></a> です。Django はこれらの例外を内部でキャッチし、適切な HTTP レスポンスコードに変換します。これらの場合、テストでは <code class=\"docutils literal notranslate\"><span class=\"pre\">response.status_code</span></code> をチェックできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Client.raise_request_exception</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の場合、テストクライアントはブラウザに返されることになる 500 レスポンスを返します。レスポンスには <a class=\"reference internal\" href=\"#django.test.Response.exc_info\" title=\"django.test.Response.exc_info\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">exc_info</span></code></a> 属性があり、未処理の例外に関する情報が提供されます。</p>\n</section>\n<section id=\"persistent-state\">\n<h3>永続的なステート<a class=\"heading-anchor\" href=\"#persistent-state\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テストクライアントはステートフルです。レスポンスがクッキーを返す場合、そのクッキーはテストクライアント内に保持され、以降すべての <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> および <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code> リクエストともに送信されます。</p>\n<p>クッキーに対する有効期限ポリシーは使えません。クッキーを期限切れにしたい場合、手動で削除するか、新たに (すべてのクッキーを削除するために) <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> を作成してください。</p>\n<p>テストクライアントは、永続的なステート情報を保持する属性を持ちます。テスト条件の一環として、これらのプロパティにアクセスできます。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.cookies\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Client.</span></span><span class=\"sig-name descname\"><span class=\"pre\">cookies</span></span><a class=\"heading-anchor\" href=\"#django.test.Client.cookies\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/http.cookies.html#http.cookies.SimpleCookie\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleCookie</span></code></a> オブジェクトで、すべてのクライアントのクッキーの現在の値を含みます。より詳しくは、<a class=\"reference external\" href=\"https://docs.python.org/3/library/http.cookies.html#module-http.cookies\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">http.cookies</span></code></a> のドキュメントを参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.session\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Client.</span></span><span class=\"sig-name descname\"><span class=\"pre\">session</span></span><a class=\"heading-anchor\" href=\"#django.test.Client.session\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>辞書形式のようなオブジェクトで、セッション情報を含みます。<a class=\"reference internal\" href=\"/ja/6.1/topics/http/sessions/\"><span class=\"doc\">セッションのドキュメント</span></a> に網羅的情報があります。</p>\n<p>セッションを修正し保存するためには、まず変数に格納される必要があります (新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> は、この属性がアクセスされるたびに作られるためです):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_something</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">session</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">session</span>\n    <span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;somekey&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;test&quot;</span>\n    <span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.asession\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Client.</span></span><span class=\"sig-name descname\"><span class=\"pre\">asession</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.asession\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.test.Client.session\" title=\"django.test.Client.session\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">session</span></code></a> 属性と同様ですが、非同期コンテキストで動作します。</p>\n</dd></dl>\n\n</section>\n<section id=\"setting-the-language\">\n<h3>言語の設定<a class=\"heading-anchor\" href=\"#setting-the-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>国際化とローカライズをサポートしているアプリケーションをテストする際、テストクライアントのリクエストに対して言語を設定するのがよいでしょう。その方法は、<a class=\"reference internal\" href=\"/ja/6.1/ref/middleware/#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code></a> が有効化されているか否かによって異なります。</p>\n<p>ミドルウェアが有効化されている場合、<a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-LANGUAGE_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_NAME</span></code></a> の名前でクッキーを作成することでセットすることができ、言語コードの値は次のようになります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_language_using_cookie</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">cookies</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_COOKIE_NAME</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">})</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;Bienvenue sur mon site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>もしくは、<code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Language</span></code> HTTP ヘッダをリクエスト内に含めます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_language_using_header</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;accept-language&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">})</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;Bienvenue sur mon site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>これらのメソッドを使用するときは、必ず各テストの最後にアクティブな言語をリセットしてください。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">tearDown</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_CODE</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n<p>さらなる詳細は <a class=\"reference internal\" href=\"/ja/6.1/topics/i18n/translation/#how-django-discovers-language-preference\"><span class=\"std std-ref\">Django はどうやって言語の優先順位を検出するのか？</span></a> にあります。</p>\n<p>ミドルウェアが有効化されていない場合、アクティブな言語は <a class=\"reference internal\" href=\"/ja/6.1/ref/utils/#django.utils.translation.override\" title=\"django.utils.translation.override\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">translation.override()</span></code></a> を使って設定できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">translation</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_language_using_override</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">override</span><span class=\"p\">(</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;Bienvenue sur mon site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>さらなる詳細は <a class=\"reference internal\" href=\"/ja/6.1/topics/i18n/translation/#explicitly-setting-the-active-language\"><span class=\"std std-ref\">明示的にアクティブな言語をセットする</span></a> にあります。</p>\n</section>\n<section id=\"example\">\n<h3>カスタマイズ例<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>以下は、テストクライアントを使ったユニットテストです。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">unittest</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleTest</span><span class=\"p\">(</span><span class=\"n\">unittest</span><span class=\"o\">.</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Every test needs a client.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Issue a GET request.</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Check that the response is 200 OK.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Check that the rendered context contains 5 customers.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;customers&quot;</span><span class=\"p\">]),</span> <span class=\"mi\">5</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p><a class=\"reference internal\" href=\"/ja/6.1/topics/testing/advanced/#django.test.RequestFactory\" title=\"django.test.RequestFactory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.RequestFactory</span></code></a></p>\n</aside>\n</section>\n</section>\n<section id=\"provided-test-case-classes\">\n<span id=\"django-testcase-subclasses\"></span><h2>提供されるテストケースのクラス<a class=\"heading-anchor\" href=\"#provided-test-case-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>標準の Python ユニットテストのクラスは、<a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> のベースクラスを拡張しています。Django は、このベースクラスのいくつかの拡張を提供します。</p>\n<figure class=\"align-default\" id=\"id4\">\n<span id=\"testcase-hierarchy-diagram\"></span><a class=\"reference internal image-reference\" href=\"../../../../../../_images/django_unittest_classes_hierarchy.svg\"><img alt=\"Django ユニットテストクラスの階層 (TestCase サブクラス)\" src=\"/ja/6.1/_images/django_unittest_classes_hierarchy.svg\" style=\"width: 508px; height: 328px;\" />\n</a>\n<figcaption>\n<p><span class=\"caption-text\">Django ユニットテストクラスの階層</span><a class=\"heading-anchor\" href=\"#id4\"><span class=\"visually-hidden\">Link to this image</span><span aria-hidden=\"true\">#</span></a></p>\n</figcaption>\n</figure>\n<p>通常の <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> は、任意のサブクラスに変換できます。つまり、テストのベースクラスを <code class=\"docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code> からサブクラスに変更します。すべての標準の Python のユニットテスト機能が利用可能なまま、以下の各セクションで説明するような便利な追加機能を追加できます。</p>\n<section id=\"simpletestcase\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code><a class=\"heading-anchor\" href=\"#simpletestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SimpleTestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>以下の機能を追加する、<a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> のサブクラスです。</p>\n<ul>\n<li><p>便利なアサーションには以下のようなものがあります。</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Assertion</p></th>\n<th class=\"head\"><p>What it checks</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaisesMessage()</span></code></a></p></td>\n<td><p>That a callable raises a certain exception</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertWarnsMessage\" title=\"django.test.SimpleTestCase.assertWarnsMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarnsMessage()</span></code></a></p></td>\n<td><p>That a callable triggers a certain warning</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertFieldOutput\" title=\"django.test.SimpleTestCase.assertFieldOutput\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertFieldOutput()</span></code></a></p></td>\n<td><p>Form field rendering and error output</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertContains\" title=\"django.test.SimpleTestCase.assertContains\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertContains()</span></code></a></p></td>\n<td><p>Presence or absence of HTML fragments</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertTemplateUsed\" title=\"django.test.SimpleTestCase.assertTemplateUsed\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTemplateUsed()</span></code></a></p></td>\n<td><p>Template usage in a response</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertURLEqual\" title=\"django.test.SimpleTestCase.assertURLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertURLEqual()</span></code></a></p></td>\n<td><p>That two URLs are equal</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertRedirects\" title=\"django.test.SimpleTestCase.assertRedirects\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRedirects()</span></code></a></p></td>\n<td><p>That an HTTP redirect occurred</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a></p></td>\n<td><p>HTML fragment equality</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertInHTML\" title=\"django.test.SimpleTestCase.assertInHTML\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertInHTML()</span></code></a></p></td>\n<td><p>HTML fragment containment</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertXMLEqual\" title=\"django.test.SimpleTestCase.assertXMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertXMLEqual()</span></code></a></p></td>\n<td><p>XML fragment equality or inequality</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertJSONEqual\" title=\"django.test.SimpleTestCase.assertJSONEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertJSONEqual()</span></code></a></p></td>\n<td><p>JSON fragment equality</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</li>\n<li><p><a class=\"reference internal\" href=\"#overriding-settings\"><span class=\"std std-ref\">編集した設定</span></a> でテストを実行する機能。</p></li>\n<li><p>Access to the synchronous and asynchronous test clients via the\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.client\" title=\"django.test.SimpleTestCase.client\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">client</span></code></a> and <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.async_client\" title=\"django.test.SimpleTestCase.async_client\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">async_client</span></code></a>\nattributes.</p></li>\n</ul>\n<p>データベースクエリを作る手薄との場合、サブクラス <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> や <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> を使用してください。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.databases\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">databases</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a> はデフォルトでデータベースクエリを許可しません。各 <code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code> テストはトランザクション内で実行されないため、これにより、他のテストに影響する書き込みクエリの実行を避けられます。この問題が心配でない場合は、テストクラスの <code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> クラス属性を <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> に設定することで、この振る舞いを無効化できます。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code> とそのサブクラス (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> など) は、クラス横断的な初期化を実現するために <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">tearDownClass()</span></code> に依存しています (例: 設定のオーバーライド)。これらをオーバーライドする必要があるときは、次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">super</span></code> 実装を呼び出すのを忘れないでください。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUpClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">setUpClass</span><span class=\"p\">()</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">tearDownClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"o\">...</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">tearDownClass</span><span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code> で例外が発生した場合の Python の動作を必ず考慮してください。もし例外が起きた場合は、クラス内のテストも <code class=\"docutils literal notranslate\"><span class=\"pre\">tearDownClass()</span></code> も実行されません。<a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.TestCase</span></code></a> の場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code>  内で作成されたトランザクションがリークし、一部のプラットフォーム (macOS で報告されています) での segmentation fault を含む、さまざまな症状が起きる結果となります。<code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code> 内での <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.SkipTest\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">unittest.SkipTest</span></code></a> などの例外を意図的に発生させたい場合は、この問題を避けるために、必ず <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> を呼び出す前に実行するようにしてください。</p>\n</aside>\n</section>\n<section id=\"transactiontestcase\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code><a class=\"heading-anchor\" href=\"#transactiontestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TransactionTestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a> を継承し、以下のようなデータベースに特有の機能を追加しています。</p>\n<ul class=\"simple\">\n<li><p>各テストの終了時にデータベースを既知の状態にリセットすることで、テストの実施や ORM の利用を容易にします。</p></li>\n<li><p>データベースの <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.fixtures\" title=\"django.test.TransactionTestCase.fixtures\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">fixtures</span></code></a>。</p></li>\n<li><p>テストの <a class=\"reference internal\" href=\"#skipping-tests\"><span class=\"std std-ref\">データベースバックエンドの機能をもとにしたスキップ</span></a>。</p></li>\n<li><p>それ以外の特別な <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.assertQuerySetEqual\" title=\"django.test.TransactionTestCase.assertQuerySetEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assert*</span></code></a> メソッド。</p></li>\n</ul>\n<p>Django's <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> class is a more commonly used subclass of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> that makes use of database transaction facilities\nto speed up the process of resetting the database to a known state at the\nend of each test. A consequence of this, however, is that some database\nbehaviors cannot be tested within a Django <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> class. For instance,\nyou cannot test that a block of code is executing within a transaction, as is\nrequired when using\n<a class=\"reference internal\" href=\"/ja/6.1/ref/models/querysets/#django.db.models.query.QuerySet.select_for_update\" title=\"django.db.models.query.QuerySet.select_for_update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code></a>. In those cases,\nyou should use <code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> は、以下のように、データベースを既知の状態にリセットする方法と、コミットとロールバックの効果をテストするコードの機能を除いて同一です。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> は、テスト実行後にすべてのテーブルを truncate することでデータベースをリセットします。<code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> はコミットとロールバックを呼び出して、これらの呼び出しのデータベースへの効果を観察できます。</p></li>\n<li><p>一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> は、テスト後にテーブルを truncate しません。代わりに、テスト終了時にロールバックされるデータベーストランザクション内にテストコードを含めます。これにより、テスト終了時のロールバックによりデータベースが初期状態に復元されることを保証します。</p></li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>ロールバックをサポートしないデータベース (例: MyISAM ストレージエンジンを使用した MySQL) 上で実行される <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> と、<code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> のすべてのインスタンスは、テスト終了時にテストデータベースからすべてのデータを削除することによってロールバックされます。</p>\n<p>アプリは <a class=\"reference internal\" href=\"/ja/6.1/topics/testing/overview/#test-case-serialized-rollback\"><span class=\"std std-ref\">データの再読み込みを確認しません</span></a>。そのため、この機能が必要な場合には (たとえば、サードパーティのアプリはこれを有効化する必要があります)、<code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> 本体内で <code class=\"docutils literal notranslate\"><span class=\"pre\">serialized_rollback</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> を設定できます。</p>\n</aside>\n</section>\n<section id=\"testcase\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code><a class=\"heading-anchor\" href=\"#testcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.TestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>これは、Django でテストを書く際に使われる、最も一般的なクラスです。<a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> (および、拡張による <a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a>) を継承します。あなたの Django アプリケーションがデータベースを使用しない場合は、<a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a> を使ってください。</p>\n<p>クラス:</p>\n<ul class=\"simple\">\n<li><p>2 つのネストされた <a class=\"reference internal\" href=\"/ja/6.1/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">atomic()</span></code></a> ブロックでテストをラップします。1 つはテスト全体、もう 1 つは各テストのためです。したがって、特定のデータベーストランザクションの振る舞いをテストしたい場合は、<a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> を使ってください。</p></li>\n<li><p>各テストの最後に、deferrable なデータベース制約をチェックします。</p></li>\n</ul>\n<p>さらに、以下のような追加メソッドを提供します。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase.setUpTestData\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">TestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">setUpTestData</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TestCase.setUpTestData\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>上述のクラスレベルの <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> ブロックは、全体の <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> に対して一度、クラスレベルでの初期データの作成を可能にします。 この技法により、<code class=\"docutils literal notranslate\"><span class=\"pre\">setUp()</span></code> を使うのに比べて高速なテストとなります。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUpTestData</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Set up data for the whole TestCase</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">foo</span> <span class=\"o\">=</span> <span class=\"n\">Foo</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">bar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">)</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test1</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Some test using self.foo</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test2</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Some other test using self.foo</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>テストがトランザクションサポートのないデータベース (たとえば MyISAM エンジンの MySQL) で実行される場合、各テストの前に <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpTestData()</span></code> が呼ばれ、高速化のメリットはなくなります。</p>\n<p>Objects assigned to class attributes in <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpTestData()</span></code> must support\ncreating deep copies with <a class=\"reference external\" href=\"https://docs.python.org/3/library/copy.html#copy.deepcopy\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">copy.deepcopy()</span></code></a> in order to isolate them\nfrom alterations performed by each test methods.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase.captureOnCommitCallbacks\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">TestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">captureOnCommitCallbacks</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">execute</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TestCase.captureOnCommitCallbacks\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定されたデータベースコネクションに対する <a class=\"reference internal\" href=\"/ja/6.1/topics/db/transactions/#django.db.transaction.on_commit\" title=\"django.db.transaction.on_commit\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">transaction.on_commit()</span></code></a> コールバックをキャプチャしたコンテキストマネージャを返します。コンテキストの終了時に、キャプチャされたコールバック関数を含むリストを返します。このリストから、コールバック上のアサーションを作成したり、その副作用を起こすために呼び出したり、コミットをエミュレートしたりできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> は、コールバックをキャプチャするためのデータベースコネクションのエイリアスです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">execute</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、コンテキストマネージャの終了時に、すべてのコールバックが呼ばれます。これは、ラップされたコードブロック後のコミットをエミュレートします。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mail</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">captureOnCommitCallbacks</span><span class=\"p\">(</span><span class=\"n\">execute</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">callbacks</span><span class=\"p\">:</span>\n            <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;/contact/&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">{</span><span class=\"s2\">&quot;message&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;I like your site&quot;</span><span class=\"p\">},</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">callbacks</span><span class=\"p\">),</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">),</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">subject</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Contact Form&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">body</span><span class=\"p\">,</span> <span class=\"s2\">&quot;I like your site&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"liveservertestcase\">\n<span id=\"live-test-server\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code><a class=\"heading-anchor\" href=\"#liveservertestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.LiveServerTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">LiveServerTestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.LiveServerTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code> は <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> とほぼ同じですが、セットアップ時に実際の Django サーバーをバックグラウンドで起動し、終了時に破棄するという追加機能が1つあります。これにより、たとえば <a class=\"reference external\" href=\"https://www.selenium.dev/\">Selenium</a> クライアントのような <a class=\"reference internal\" href=\"#test-client\"><span class=\"std std-ref\">Django ダミークライアント</span></a> 以外の自動化されたテストクライアントを使えるようになり、ブラウザ内での一連の機能テストを実施して、実際のユーザーの行動をシミュレートできます。</p>\n<p>ライブサーバーは <code class=\"docutils literal notranslate\"><span class=\"pre\">localhost</span></code> をリッスンして、オペレーティングシステムが空きポートに割り当てるために使われるポート 0 にバインドします。サーバーの URL はテスト中は <code class=\"docutils literal notranslate\"><span class=\"pre\">self.live_server_url</span></code> でアクセスできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code> の使用方法を紹介するために、Selenium テストを書いてみましょう。最初に、 <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a> パッケージをインストールする必要があります。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span><span class=\"s2\">&quot;selenium &gt;= 4.23.0&quot;</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install <span class=\"s2\">&quot;selenium &gt;= 4.23.0&quot;</span>\n</code></pre></div></div></div>\n<p>その後、<code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code> ベースのテストをアプリのテストモジュール (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/tests.py</span></code>) に追加します。たとえば、<a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code></a> アプリを使っていて、開発時に <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG=True</span></code> を使用したときと同じように、つまり、<a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> を使って静的ファイルを集める必要なく、静的ファイルがテストの実行中に配信されてほしいとします。その機能を提供する <a class=\"reference internal\" href=\"/ja/6.1/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerTestCase\" title=\"django.contrib.staticfiles.testing.StaticLiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StaticLiveServerTestCase</span></code></a> サブクラスを使うことになります。それが必要ない場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.LiveServerTestCase</span></code> で置き換えてください。</p>\n<p>このテストに対するコードは、以下のようになるでしょう。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles.testing</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StaticLiveServerTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">selenium.webdriver.common.by</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">By</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">selenium.webdriver.firefox.webdriver</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WebDriver</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MySeleniumTests</span><span class=\"p\">(</span><span class=\"n\">StaticLiveServerTestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;user-data.json&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUpClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">setUpClass</span><span class=\"p\">()</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">selenium</span> <span class=\"o\">=</span> <span class=\"n\">WebDriver</span><span class=\"p\">()</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">implicitly_wait</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">tearDownClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">quit</span><span class=\"p\">()</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">tearDownClass</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">live_server_url</span><span class=\"si\">}</span><span class=\"s2\">/login/&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">username_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">NAME</span><span class=\"p\">,</span> <span class=\"s2\">&quot;username&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">username_input</span><span class=\"o\">.</span><span class=\"n\">send_keys</span><span class=\"p\">(</span><span class=\"s2\">&quot;myuser&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">password_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">NAME</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">password_input</span><span class=\"o\">.</span><span class=\"n\">send_keys</span><span class=\"p\">(</span><span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">XPATH</span><span class=\"p\">,</span> <span class=\"s1\">&#39;//input[@value=&quot;Log in&quot;]&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">click</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>最後に、次のようにテストを実行できます。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>myapp.tests.MySeleniumTests.test_login\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> manage.py test myapp.tests.MySeleniumTests.test_login\n</code></pre></div></div></div>\n<p>この例では、Firefox が自動的に開き、ログインページに行き、クレデンシャルを入力して、「Log in」ボタンをクリックします。Selenium は、Firefox をインストール済みでないか、他のブラウザを使いたいときのために、他のドライバも提供します。上の例は、Selenium クライアントができることのほんの一部に過ぎません。詳細については、<a class=\"reference external\" href=\"https://selenium-python.readthedocs.io/api.html\">完全なリファレンス</a> を確認してください。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>インメモリ SQLite データベースを使用してテストを実行する場合、同じデータベース接続を 2 つのスレッドで並行して共有します。ライブサーバを実行するスレッドとテストケースを実行するスレッドです。この 2 つのスレッドが共有接続を介して同時にデータベースをクエリしないようにすることが重要です。これは、テストがランダムに失敗する可能性があるからです。そのため、2 つのスレッドが同時にデータベースにアクセスしないようにする必要があります。特に、場合によっては (たとえばリンクをクリックしたりフォームを送信したりした直後に) Selenium がレスポンスを受け取り、次のページが読み込まれたことを確認してからテストを実行する必要があるかもしれません。たとえば、レスポンスの中に <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;body&gt;</span></code> という HTML タグが見つかるまで Selenium を待たせるには、下記のようにします (Selenium &gt; 2.13 が必要です):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">selenium.webdriver.support.wait</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WebDriverWait</span>\n\n    <span class=\"n\">timeout</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"o\">...</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">XPATH</span><span class=\"p\">,</span> <span class=\"s1\">&#39;//input[@value=&quot;Log in&quot;]&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">click</span><span class=\"p\">()</span>\n    <span class=\"c1\"># Wait until the response is received</span>\n    <span class=\"n\">WebDriverWait</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"p\">,</span> <span class=\"n\">timeout</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">until</span><span class=\"p\">(</span>\n        <span class=\"k\">lambda</span> <span class=\"n\">driver</span><span class=\"p\">:</span> <span class=\"n\">driver</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">TAG_NAME</span><span class=\"p\">,</span> <span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>ここで厄介なのは、特にサーバーが最初のドキュメントを生成した後に動的にHTMLを生成する最近のウェブアプリでは、「ページの読み込み」というものが実際には存在しないということです。そのため、レスポンスに <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;body&gt;</span></code> があるかどうかをチェックすることは、必ずしもすべてのユースケースに適しているとは限りません。詳しくは <a class=\"reference external\" href=\"https://web.archive.org/web/20160129132110/http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_WebDriver_fails_to_find_elements_/_Does_not_block_on_page_loa\">Selenium FAQ</a> と <a class=\"reference external\" href=\"https://www.selenium.dev/documentation/webdriver/waits/#explicit-waits\">Selenium documentation</a> を参照してください。</p>\n</aside>\n</section>\n</section>\n<section id=\"test-cases-features\">\n<h2>テストケースの機能<a class=\"heading-anchor\" href=\"#test-cases-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"default-test-client\">\n<h3>デフォルトのテストクライアント<a class=\"heading-anchor\" href=\"#default-test-client\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.client\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">client</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.async_client\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">async_client</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.async_client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Every <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.*TestCase</span></code> instance has access to Django's synchronous\nand asynchronous test clients as <code class=\"docutils literal notranslate\"><span class=\"pre\">self.client</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">self.async_client</span></code>,\nrespectively. Both clients are recreated for each test, so you don't have to\nworry about state (such as cookies) carrying over from one test to another.</p>\n<p>For example, rather than instantiating a <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> in each test:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">unittest</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleTest</span><span class=\"p\">(</span><span class=\"n\">unittest</span><span class=\"o\">.</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/index/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">self.client</span></code> を参照できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/index/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"customizing-the-test-client\">\n<h3>テストクライアントをカスタムする<a class=\"heading-anchor\" href=\"#customizing-the-test-client\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.client_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">client_class</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.client_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.async_client_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">async_client_class</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.async_client_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If you want to use a different <a class=\"reference internal\" href=\"#django.test.Client\" title=\"django.test.Client\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Client</span></code></a> or <a class=\"reference internal\" href=\"#django.test.AsyncClient\" title=\"django.test.AsyncClient\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code></a> class\n(for example, a subclass with customized behavior), use the\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.client_class\" title=\"django.test.SimpleTestCase.client_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">client_class</span></code></a> or\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.async_client_class\" title=\"django.test.SimpleTestCase.async_client_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">async_client_class</span></code></a> class attributes.</p>\n<p>For example, to customize the synchronous test client:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span><span class=\"p\">,</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTestClient</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Specialized methods for your environment</span>\n    <span class=\"o\">...</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">client_class</span> <span class=\"o\">=</span> <span class=\"n\">MyTestClient</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_my_stuff</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Here self.client is an instance of MyTestClient...</span>\n        <span class=\"n\">call_some_test_code</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>The same pattern applies to the asynchronous test client by subclassing\n<a class=\"reference internal\" href=\"#django.test.AsyncClient\" title=\"django.test.AsyncClient\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code></a> and setting <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.async_client_class\" title=\"django.test.SimpleTestCase.async_client_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">async_client_class</span></code></a>.</p>\n</section>\n<section id=\"fixture-loading\">\n<span id=\"topics-testing-fixtures\"></span><h3>フィクスチャのロード<a class=\"heading-anchor\" href=\"#fixture-loading\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.fixtures\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fixtures</span></span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.fixtures\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>データベースを利用したウェブサイト向けのテストケースクラスは、データベースにデータが何もなければあまり役に立ちません。<a class=\"reference internal\" href=\"#django.test.TestCase.setUpTestData\" title=\"django.test.TestCase.setUpTestData\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">TestCase.setUpTestData()</span></code></a> などで ORM を使用してオブジェクトを作成すると、テストがよりリーダブルになってメンテナンス性が高まりますが、<a class=\"reference internal\" href=\"/ja/6.1/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">フィクスチャ</span></a> を活用することもできます。</p>\n<p>フィクスチャは、Django がどうやってデータベースにインポートするか分かっているデータのコレクションです。たとえば、サイトがユーザーアカウントを持つ場合、テスト内でデータベースに格納させるために、フェイクのユーザーアカウントのフィクスチャをセットアップできます。</p>\n<p>フィクスチャを作成するもっとも分かりやすい方法は、<a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">dumpdata</span></code></a> コマンドを使うことです。これは、データベース内にすでに何らかのデータがあるという仮定に基づいています。詳細は、<a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span> <span class=\"pre\">のドキュメント</span></code></a> 参照してください。</p>\n<p>いったんフィクスチャを作成して <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 内ののどれかで <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> 辞書に記述したら、<a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.TestCase</span></code></a> サブクラスで <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> クラス属性を指定することで、ユニットテスト内でこのフィクスチャを使えます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Animal</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AnimalTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;mammals.json&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birds&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Test definitions as before.</span>\n        <span class=\"n\">call_setup_methods</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_fluffy_animals</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># A test that uses the fixtures.</span>\n        <span class=\"n\">call_some_test_code</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>具体的には、以下のことが起こります。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code> の実行中に、指定された名前のフィクスチャがすべて読み込まれます。この例では、Django はまず <code class=\"docutils literal notranslate\"><span class=\"pre\">mammals</span></code> という名前の JSON フィクスチャを、続いて <code class=\"docutils literal notranslate\"><span class=\"pre\">birds</span></code> という名前のフィクスチャを読み込みます。フィクスチャの定義方法やインストール方法については、 <a class=\"reference internal\" href=\"/ja/6.1/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">フィクスチャ (fixture)</span></a> トピックを参照してください。</p></li>\n</ul>\n<p>多くのユニットテストで使用される <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> の場合、パフォーマンス向上のために各テスト終了後にトランザクションを使ってデータベースをクリアするため、それ以外の処理を Django が行う必要はありません。しかし <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> を使った場合は、以下の処理が実行されます：</p>\n<ul class=\"simple\">\n<li><p>各テストの終了時に、Django はデータベースを flush し、 <a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> 実行直後の状態に戻します。</p></li>\n<li><p>その後の各テストにおいては、 <code class=\"docutils literal notranslate\"><span class=\"pre\">setUp()</span></code> が実行される前にフィクスチャが再読み込みされます。</p></li>\n</ul>\n<p>いずれの場合でも、あるテストの結果が他のテストやテストの実行順によって影響を受けることはありません。</p>\n<p>デフォルトでは、フィクスチャは <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> データベースにだけロードされます。複数のデータベースと <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.databases\" title=\"django.test.TransactionTestCase.databases\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.databases</span></code></a> を使用している場合は、フィクスチャは指定されたすべてのデータベースにロードされます。</p>\n</section>\n<section id=\"urlconf-configuration\">\n<h3>URLconf の設定<a class=\"heading-anchor\" href=\"#urlconf-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>アプリケーションがヴューを提供する場合、テストクライアントを使ってビューを実行するテストを含めたくなるかもしれません。しかし、エンドユーザーは、アプリケーション内で選択した任意の URL に自由にビューをデプロイできます。これが意味するのは、テストはビューが特定の URL で利用可能であるという事実に頼ることができないということです。URLconf の設定のためには、テストクラスまたはメソッドを <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;override_settings(ROOT_URLCONF=...)</span></code> を使用してデコレーションしてください。</p>\n</section>\n<section id=\"multi-database-support\">\n<span id=\"testing-multi-db\"></span><h3>マルチデータベースのサポート<a class=\"heading-anchor\" href=\"#multi-database-support\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.databases\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">databases</span></span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Django は、設定の <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> で定義され、<code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> を介して少なくとも1つのテストで参照されるデータベースそれぞれに対応するテストデータベースをセットアップします。</p>\n<p>しかし、 Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> の実行にかかる時間の大部分は、各テストの終了時にデータベースがクリーンであることを保証する <code class=\"docutils literal notranslate\"><span class=\"pre\">flush</span></code> の呼び出しに消費されます。複数のデータベースがある場合、複数回のフラッシュが必要であり (各データベースに 1 回ずつ)、特に複数データベースの動作をテストする必要がないテストでは、これは時間のかかる作業です。</p>\n<p>最適化として、Django は各テスト実行の終了時に <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> データベースだけをフラッシュします。セットアップに複数のデータベースが含まれていて、全てのデータベースをクリーンにする必要があるテストがある場合、テストスイートで <code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> 属性を使って、追加のデータベースのフラッシュを要求できます。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestMyViews</span><span class=\"p\">(</span><span class=\"n\">TransactionTestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">databases</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;default&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;other&quot;</span><span class=\"p\">}</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_index_page_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">call_some_test_code</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>このテストケースクラスは <code class=\"docutils literal notranslate\"><span class=\"pre\">test_index_page_view</span></code> を実行したあとに <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code> のテストデータベースをフラッシュします。また、<code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> を使用すると、すべてのテストデータベースをフラッシュするように指定できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> フラグは <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.fixtures\" title=\"django.test.TransactionTestCase.fixtures\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.fixtures</span></code></a> がどのデータベースに読み込まれるかを制御します。デフォルトでは、フィクスチャは <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> データベースにのみ読み込まれます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> にないデータベースに対するクエリは、テスト間で状態が漏れるのを防ぐためにアサーションエラーを出します。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase.databases\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">databases</span></span><a class=\"heading-anchor\" href=\"#django.test.TestCase.databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>デフォルトでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> の実行中にトランザクションにラップされるのは <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> データベースだけで、他のデータベースにクエリを実行しようとすると、テスト間の状態リークを防ぐためにアサーションエラーが発生します。</p>\n<p>デフォルト以外のデータベースに対してトランザクションラッピングを要求するには、テストクラスの <code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> クラス属性を使用します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">OtherDBTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">databases</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;other&quot;</span><span class=\"p\">}</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_other_db_query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>このテストは <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code> データベースに対するクエリのみを許可します。 <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.databases\" title=\"django.test.SimpleTestCase.databases\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">SimpleTestCase.databases</span></code></a> や <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.databases\" title=\"django.test.TransactionTestCase.databases\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.databases</span></code></a> と同様に、定数 <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> を使用して、すべてのデータベースに対するクエリを許可するように指定できます。</p>\n</section>\n<section id=\"overriding-settings\">\n<span id=\"id1\"></span><h3>設定のオーバーライド<a class=\"heading-anchor\" href=\"#overriding-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>テストの設定値を一時的に変更するには、以下の関数を使います。 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> を直接操作しないでください。Django はそのような操作の後、元の値を復元しません。</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.settings\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">settings</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>For testing purposes it's often useful to change a setting temporarily and\nrevert to the original value after running the testing code. For this use case\nDjango provides a standard <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#context-managers\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">context manager</span></a> called\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.settings\" title=\"django.test.SimpleTestCase.settings\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">settings()</span></code></a>, which can be used like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoginTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># First check for the default behavior</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/accounts/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Then override the LOGIN_URL setting</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">settings</span><span class=\"p\">(</span><span class=\"n\">LOGIN_URL</span><span class=\"o\">=</span><span class=\"s2\">&quot;/other/login/&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/other/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>この例では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">with</span></code> ブロック内のコードに対して、 <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGIN_URL</span></code></a> 設定をオーバーライドし、その後にその値を以前の状態にリセットします。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.modify_settings\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">modify_settings</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.modify_settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>値のリストを含む設定の再定義は難しいことがあります。実際には、値の追加や削除で十分なことも多いです。Django には設定を簡単に変更するための <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.modify_settings\" title=\"django.test.SimpleTestCase.modify_settings\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> コンテキストマネージャがあります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MiddlewareTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_cache_middleware</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modify_settings</span><span class=\"p\">(</span>\n            <span class=\"n\">MIDDLEWARE</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                <span class=\"s2\">&quot;append&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.FetchFromCacheMiddleware&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.UpdateCacheMiddleware&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;remove&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                    <span class=\"s2\">&quot;django.contrib.sessions.middleware.SessionMiddleware&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;django.contrib.auth.middleware.AuthenticationMiddleware&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;django.contrib.messages.middleware.MessageMiddleware&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n        <span class=\"p\">):</span>\n            <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n            <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>各アクションに対して、値のリストまたは文字列を指定できます。値がすでにリストに存在する場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">prepend</span></code> は何もしません。同様に、値が存在しない場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">remove</span></code> は何もしません。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.override_settings\">\n<span class=\"sig-name descname\"><span class=\"pre\">override_settings</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.override_settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>In case you want to override a setting for a test method, Django provides the\n<a class=\"reference internal\" href=\"#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a> <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-decorator\" title=\"(in Python v3.14)\"><span>decorator</span></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">override_settings</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoginTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@override_settings</span><span class=\"p\">(</span><span class=\"n\">LOGIN_URL</span><span class=\"o\">=</span><span class=\"s2\">&quot;/other/login/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/other/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このデコレータは <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> クラスにも適用できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">override_settings</span>\n\n\n<span class=\"nd\">@override_settings</span><span class=\"p\">(</span><span class=\"n\">LOGIN_URL</span><span class=\"o\">=</span><span class=\"s2\">&quot;/other/login/&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoginTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/other/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.modify_settings\">\n<span class=\"sig-name descname\"><span class=\"pre\">modify_settings</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.modify_settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>同様に、Django には <a class=\"reference internal\" href=\"#django.test.modify_settings\" title=\"django.test.modify_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> デコレータがあります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">modify_settings</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MiddlewareTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@modify_settings</span><span class=\"p\">(</span>\n        <span class=\"n\">MIDDLEWARE</span><span class=\"o\">=</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;append&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.FetchFromCacheMiddleware&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.UpdateCacheMiddleware&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_cache_middleware</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n        <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>このデコレータはテストケースクラスにも適用できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">modify_settings</span>\n\n\n<span class=\"nd\">@modify_settings</span><span class=\"p\">(</span>\n    <span class=\"n\">MIDDLEWARE</span><span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;append&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.FetchFromCacheMiddleware&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.UpdateCacheMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MiddlewareTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_cache_middleware</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n        <span class=\"c1\"># ...</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>クラスが渡されると、これらのデコレータはそのクラスを直接変更して返します。変更したコピーを作成して返すわけではありません。そのため、上記の例を微調整して <code class=\"docutils literal notranslate\"><span class=\"pre\">LoginTestCase</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">MiddlewareTestCase</span></code> と異なる名前を返り値に割り当てようとすると、元のテストケースクラスがデコレータの影響を受けていることに驚くかもしれません。あるクラスに対して、 <a class=\"reference internal\" href=\"#django.test.modify_settings\" title=\"django.test.modify_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> は常に <a class=\"reference internal\" href=\"#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a> の後に適用されます。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>設定ファイルには、Django の内部の初期化時にだけ参照されるいくつかの設定が含まれています。設定ファイルを <code class=\"docutils literal notranslate\"><span class=\"pre\">override_settings</span></code> で変更した場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> モジュール経由でアクセスすれば設定は変更されますが、 Django の内部からは別の方法でアクセスはされます。これらの設定に <a class=\"reference internal\" href=\"#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a> や <a class=\"reference internal\" href=\"#django.test.modify_settings\" title=\"django.test.modify_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> を使っても、実際には期待通りの動作をすることはないでしょう。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> の設定を変更することはお勧めしません。 <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a> の設定を変更することは可能ですが、 <a class=\"reference internal\" href=\"/ja/6.1/topics/http/sessions/#module-django.contrib.sessions\" title=\"django.contrib.sessions: Provides session management for Django projects.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions</span></code></a> のようなキャッシュを使用する内部機能を使用している場合は少し厄介です。例えば、キャッシュされたセッションを使用し、 <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a> を上書きするテストでは、セッションバックエンドを再初期化する必要があります。</p>\n<p>最後に、設定をモジュールレベルの定数としてエイリアスすることは避けてください。なぜなら、<code class=\"docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code> はそのような値には機能しないからです。それらの値はモジュールが最初にインポートされた時にのみ評価されます。</p>\n</aside>\n<p>下記のように、設定が上書きされた後にその設定を削除することで、設定がない状態をシミュレートすることもできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@override_settings</span><span class=\"p\">()</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_something</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">del</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LOGIN_URL</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>設定を上書きする場合、アプリのコードが、キャッシュや設定が変更されても状態を保持するような機能を使用しているケースにも対処してください。Django には <a class=\"reference internal\" href=\"/ja/6.1/ref/signals/#django.test.signals.setting_changed\" title=\"django.test.signals.setting_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.test.signals.setting_changed</span></code></a> シグナルがあり、設定が変更されたときに状態をクリーンアップしたり、リセットしたりするためのコールバックを登録できます。</p>\n<p>Django 自身は、このシグナルを使って様々なデータをリセットします:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>オーバーライドされた設定</p></th>\n<th class=\"head\"><p>データのリセット</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>USE_TZ, TIME_ZONE</p></td>\n<td><p>データベースのタイムゾーン</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>TEMPLATES</p></td>\n<td><p>テンプレートエンジン</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>FORM_RENDERER</p></td>\n<td><p>デフォルトのレンダラー</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>SERIALIZATION_MODULES</p></td>\n<td><p>シリアライザーのキャッシュ</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>LOCALE_PATHS、LANGUAGE_CODE</p></td>\n<td><p>デフォルトの翻訳と読み込まれた翻訳</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>STATIC_ROOT, STATIC_URL, STORAGES</p></td>\n<td><p>ストレージの設定</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"isolating-apps\">\n<h3>アプリの隔離<a class=\"heading-anchor\" href=\"#isolating-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.isolate_apps\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">utils.</span></span><span class=\"sig-name descname\"><span class=\"pre\">isolate_apps</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">app_labels</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attr_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">kwarg_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.utils.isolate_apps\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ラップされたコンテキスト内で定義されたモデルを、独自の隔離された <a class=\"reference internal\" href=\"/ja/6.1/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code></a> レジストリに登録します。この機能は、クラスが後できれいに削除され、名前衝突のリスクがないため、テスト用にモデルクラスを作成するときに便利です。</p>\n<p>隔離されたレジストリが含む必要があるアプリラベルは、個別の引数として渡す必要があります。<code class=\"docutils literal notranslate\"><span class=\"pre\">isolate_apps()</span></code> をデコレータまたはコンテキストマネージャとして使用できます。以下に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">isolate_apps</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelTests</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>あるいは、次のようにします。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">with</span> <span class=\"n\">isolate_apps</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">):</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>デコレータ形式は、クラスにも適用できます。</p>\n<p>2つのオプション引数が指定できます。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">attr_name</span></code>: クラスデコレータとして使用される場合に、隔離されたレジストリに割り当てられる属性。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kwarg_name</span></code>: 関数デコレータとして使用された場合に、隔離されたレジストリに渡されるキーワード引数。</p></li>\n</ul>\n<p>モデル登録を隔離するために使用される一時的な <code class=\"docutils literal notranslate\"><span class=\"pre\">Apps</span></code> インスタンスは、クラスデコレータとして使用する際に <code class=\"docutils literal notranslate\"><span class=\"pre\">attr_name</span></code> パラメータを使用して属性として取得できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"n\">attr_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;apps&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;TestModel&quot;</span><span class=\"p\">),</span> <span class=\"n\">TestModel</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>あるいは、<code class=\"docutils literal notranslate\"><span class=\"pre\">kwarg_name</span></code> パラメータを使ってメソッドデコレータとして使用する際に、 テストメソッドの引数として指定することもできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"n\">kwarg_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;apps&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">apps</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIs</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;TestModel&quot;</span><span class=\"p\">),</span> <span class=\"n\">TestModel</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"emptying-the-test-outbox\">\n<span id=\"emptying-test-outbox\"></span><h3>テスト用の送信トレイを空にする<a class=\"heading-anchor\" href=\"#emptying-the-test-outbox\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django のカスタムの <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> クラスを使うと、テストランナーは各テストケースの開始時に、テスト用のメール送信トレイの中身を消去します。</p>\n<p>テスト中のメールサービスの詳細については、以下の <a class=\"reference internal\" href=\"#email-services\">Email services</a> を参照してください。</p>\n</section>\n<section id=\"assertions\">\n<span id=\"id2\"></span><h3>アサーション<a class=\"heading-anchor\" href=\"#assertions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Python の通常の <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> クラスが <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTrue()</span></code></a> や <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertEqual()</span></code></a> のようなアサーションメソッドを実装しているように、 Django のカスタム <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> クラスは、Web アプリケーションのテストに便利なカスタムのアサーションメソッドを多数提供しています。</p>\n<p>これらのアサーションメソッドで出力される失敗メッセージは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">msg_prefix</span></code> 引数でカスタマイズできます。この文字列は、アサーションが生成する失敗メッセージの先頭に付加されます。これにより、テストスイートで発生した失敗の場所や原因を特定しやすくなります。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertRaisesMessage\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertRaisesMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_exception</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">callable</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertRaisesMessage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dt class=\"sig sig-object py\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertRaisesMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_exception</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em><span class=\"sig-paren\">)</span></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">callable</span></code> の実行が <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_exception</span></code> を引き起こし、かつその例外のメッセージに <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_message</span></code> が含まれていることをアサートします。他の結果はすべて失敗として報告されます。これは <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">unittest.TestCase.assertRaisesRegex()</span></code></a> の簡易版で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_message</span></code> が正規表現として扱われない点が違います。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">expected_exception</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_message</span></code> パラメータのみが与えられた場合、テストされるコードを関数としてではなくインラインで記述できるように、コンテキストマネージャを返します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRaisesMessage</span><span class=\"p\">(</span><span class=\"ne\">ValueError</span><span class=\"p\">,</span> <span class=\"s2\">&quot;invalid literal for int()&quot;</span><span class=\"p\">):</span>\n    <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s2\">&quot;a&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertWarnsMessage\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertWarnsMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_warning</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">callable</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertWarnsMessage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dt class=\"sig sig-object py\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertWarnsMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_warning</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em><span class=\"sig-paren\">)</span></dt>\n<dd><p>これは <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SimpleTestCase.assertRaisesMessage()</span></code></a> に似ていますが、 <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaisesRegex()</span></code></a> の代わりに <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertWarnsRegex\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarnsRegex()</span></code></a> と同様のものです。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertFieldOutput\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertFieldOutput</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fieldclass</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">valid</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">invalid</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_args</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_kwargs</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">empty_value</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertFieldOutput\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>様々な入力に対してフォームフィールドが正しく動作することをアサートします。</p>\n<dl class=\"field-list simple\">\n<dt class=\"field-odd\">パラメータ<span class=\"colon\">:</span></dt>\n<dd class=\"field-odd\"><ul class=\"simple\">\n<li><p><strong>fieldclass</strong> -- テストされるフィールドのクラス。</p></li>\n<li><p><strong>valid</strong> -- 有効な入力をそれらの期待されるクリーンな値にマッピングする辞書。</p></li>\n<li><p><strong>invalid</strong> -- 無効な入力を一つ以上の発生したエラーメッセージにマッピングする辞書。</p></li>\n<li><p><strong>field_args</strong> -- フィールドをインスタンス化するために渡される引数。</p></li>\n<li><p><strong>field_kwargs</strong> -- フィールドをインスタンス化するために渡されるキーワード引数。</p></li>\n<li><p><strong>empty_value</strong> -- <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_values</span></code> における入力の期待されるクリーンな出力。</p></li>\n</ul>\n</dd>\n</dl>\n<p>たとえば、以下のコードは <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailField</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">a&#64;a.com</span></code> を有効なメールアドレスとして受け入れるが、<code class=\"docutils literal notranslate\"><span class=\"pre\">aaa</span></code> を合理的なエラーメッセージと共に拒否することをテストします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertFieldOutput</span><span class=\"p\">(</span>\n    <span class=\"n\">EmailField</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;a@a.com&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;a@a.com&quot;</span><span class=\"p\">},</span> <span class=\"p\">{</span><span class=\"s2\">&quot;aaa&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Enter a valid email address.&quot;</span><span class=\"p\">]}</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertFormError\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertFormError</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertFormError\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>フォーム上のフィールドが提供されたエラーのリストを発生させることをアサートします。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> インスタンスです。フォームは <a class=\"reference internal\" href=\"/ja/6.1/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">バインドされている (bound である)</span></a> 必要がありますが、必ずしもバリデートされている必要はありません (<code class=\"docutils literal notranslate\"><span class=\"pre\">assertFormError()</span></code> はフォームに対して自動的に <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code> を呼び出します)。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> はチェックするフォームのフィールド名です。フォームの <a class=\"reference internal\" href=\"/ja/6.1/ref/forms/api/#django.forms.Form.non_field_errors\" title=\"django.forms.Form.non_field_errors\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">特定のフィールドに関連付けられていないエラー</span></code></a> をチェックするには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">field=None</span></code> を使用します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code> は、フィールドが持つことが期待されるすべてのエラー文字列のリストです。1つのエラーのみが期待される場合は、単一のエラー文字列を渡すこともできます。つまり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">errors='error</span> <span class=\"pre\">message'</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">errors=['error</span> <span class=\"pre\">message']</span></code> と同じです。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertFormSetError\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertFormSetError</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">formset</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form_index</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertFormSetError\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>レンダリング時に <code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code> が指定されたエラーリストを発生させることをアサートします。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">FormSet</span></code> のインスタンスです。フォームセットはバインドされている (bound である) 必要がありますが、必ずしもバリデートされている必要はありません (<code class=\"docutils literal notranslate\"><span class=\"pre\">assertFormSetError()</span></code> は自動的にフォームセットの <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code> を呼び出します)。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">form_index</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">FormSet</span></code> 内のフォームの番号です (0 から始まります)。フォームセットのフォーム以外のエラー、つまり <code class=\"docutils literal notranslate\"><span class=\"pre\">formset.non_form_errors()</span></code> を呼び出したときに表示されるエラーをチェックするには <code class=\"docutils literal notranslate\"><span class=\"pre\">form_index=None</span></code> を使用します。この場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">field=None</span></code> も指定する必要があります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">assertFormError()</span></code> のパラメータと同じ意味です。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertContains\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertContains</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">text</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">count</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertContains\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Asserts that an <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> produced the\ngiven <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse.status_code\" title=\"django.http.HttpResponse.status_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">status_code</span></code></a> and that <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code>\nappears in its <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse.content\" title=\"django.http.HttpResponse.content\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">content</span></code></a>. If <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code>\nis provided, <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> must occur exactly <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> times in the response.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> を HTML として扱うには <code class=\"docutils literal notranslate\"><span class=\"pre\">html</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定します。レスポンスの内容との比較は、一文字ずつ等しくするのではなく、HTMLのセマンティクスに基づいて行われます。ほとんどの場合、空白文字は無視され、属性の順序は重要ではありません。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertNotContains\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertNotContains</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">text</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertNotContains\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Asserts that an <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> produced the\ngiven <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse.status_code\" title=\"django.http.HttpResponse.status_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">status_code</span></code></a> and that <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> does\n<em>not</em> appear in its <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse.content\" title=\"django.http.HttpResponse.content\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">content</span></code></a>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> を HTML として扱うには <code class=\"docutils literal notranslate\"><span class=\"pre\">html</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定します。レスポンスの内容との比較は、一文字ずつ等しくするのではなく、HTMLのセマンティクスに基づいて行われます。ほとんどの場合、空白文字は無視され、属性の順序は重要ではありません。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertTemplateUsed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertTemplateUsed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">count</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertTemplateUsed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された名前のテンプレートがレスポンスのレンダリングに使われたことをアサートします。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">response</span></code> must be a <a class=\"reference internal\" href=\"#django.test.Response\" title=\"django.test.Response\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Response</span></code></a> instance returned by\nthe test client.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin/index.html'</span></code> のような文字列を指定します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> 引数はテンプレートがレンダリングされるべき回数を示す整数です。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> で、テンプレートが1回以上レンダリングされるべきことを意味します。</p>\n<p>このようにコンテキストマネージャとして使用できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertTemplateUsed</span><span class=\"p\">(</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">):</span>\n    <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertTemplateUsed</span><span class=\"p\">(</span><span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">):</span>\n    <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertTemplateNotUsed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertTemplateNotUsed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertTemplateNotUsed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された名前のテンプレートがレスポンスのレンダリングに使われて <em>いない</em> ことをアサートします。</p>\n<p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertTemplateUsed\" title=\"django.test.SimpleTestCase.assertTemplateUsed\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTemplateUsed()</span></code></a> と同じようにコンテキストマネージャとして使うことができます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertURLEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertURLEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">url1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">url2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertURLEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>同じ名前のパラメータを除いて、クエリ文字列パラメータの順序を無視して、2つのURLが同じであることをアサートします。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?x=1&amp;y=2</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?y=2&amp;x=1</span></code> と等しいですが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?a=1&amp;a=2</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?a=2&amp;a=1</span></code> と等しくありません。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertRedirects\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertRedirects</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_url</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">302</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">target_status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fetch_redirect_response</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertRedirects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Asserts that the <a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> returned a response\nwith a redirect status (based on its\n<a class=\"reference internal\" href=\"/ja/6.1/ref/request-response/#django.http.HttpResponse.status_code\" title=\"django.http.HttpResponse.status_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">status_code</span></code></a>), redirected to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> (including any <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> data), and that the final response\nwas received with <code class=\"docutils literal notranslate\"><span class=\"pre\">target_status_code</span></code>.</p>\n<p>リクエストが <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code> 引数を使った場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">target_status_code</span></code> はリダイレクトチェーンの最終地点の url とステータスコードになります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fetch_redirect_response</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の場合、最終ページは読み込まれません。テストクライアントは外部 URL を取得できないので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> が Django アプリの一部でない場合、これは特に便利です。</p>\n<p>スキームは、2つのURL間の比較を行う際に正しく処理されます。リダイレクト先にスキームが指定されていない場合、元のリクエストのスキームが使われます。もし存在すれば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> のスキームが比較に使われます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertHTMLEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertHTMLEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> が等しいことをアサートします。比較はHTMLのセマンティクスに基づいて行われます。比較は以下のことが考慮されます:</p>\n<ul class=\"simple\">\n<li><p>HTMLタグの前後の空白は無視されます。</p></li>\n<li><p>すべての種類の空白は同等とみなされます。</p></li>\n<li><p>すべての開いたタグは暗黙的に閉じられます。例えば、周囲のタグが閉じられるかHTMLドキュメントが終了したときなど。</p></li>\n<li><p>空のタグは自己終了 (self-closing) タグと等価です。</p></li>\n<li><p>HTML要素の属性の順序は重要ではありません。</p></li>\n<li><p>引数を持たないブール属性 (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">checked</span></code>) は、名前と値が同じ属性と等しいです (例を参照)。</p></li>\n<li><p>同じ文字を参照するテキスト、文字参照、およびエンティティ参照は等価です。</p></li>\n</ul>\n<p>以下の例は有効なテストであり、どれも <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> を引き起こしません。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertHTMLEqual</span><span class=\"p\">(</span>\n    <span class=\"s2\">&quot;&lt;p&gt;Hello &lt;b&gt;&amp;#x27;world&amp;#x27;!&lt;/p&gt;&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;&lt;p&gt;</span>\n<span class=\"sd\">        Hello   &lt;b&gt;&amp;#39;world&amp;#39;! &lt;/b&gt;</span>\n<span class=\"sd\">    &lt;/p&gt;&quot;&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertHTMLEqual</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;&lt;input type=&quot;checkbox&quot; checked=&quot;checked&quot; id=&quot;id_accept_terms&quot; /&gt;&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;&lt;input id=&quot;id_accept_terms&quot; type=&quot;checkbox&quot; checked&gt;&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> はHTMLを含んでいなければなりません。どちらかが解析できない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> が発生します。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertHTMLNotEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertHTMLNotEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertHTMLNotEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> が等しく <em>ない</em> ことをアサートします。比較はHTMLのセマンティクスに基づいて行われます。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> を参照してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> はHTMLを含んでいなければなりません。どちらかが解析できない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> が発生します。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertXMLEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertXMLEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertXMLEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">xml1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">xml2</span></code> が等しいことをアサートします。比較はXMLセマンティクスに基づいて行われます。<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> と同様に、比較は構文解析された内容に基づいて行われるため、構文の違いは考慮されず、意味の違いだけが考慮されます。無効なXMLがパラメータに渡された場合、両方の文字列が同じであっても、常に <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> が発生します。</p>\n<p>XML宣言、ドキュメントタイプ、処理命令、コメントは無視されます。比較されるのはルート要素とその子要素だけです。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertXMLNotEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertXMLNotEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertXMLNotEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">xml1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">xml2</span></code> が等しく <em>ない</em> ことをアサートします。比較はXMLセマンティクスに基づいて行われます。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertXMLEqual\" title=\"django.test.SimpleTestCase.assertXMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertXMLEqual()</span></code></a> を参照してください。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertInHTML\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertInHTML</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">needle</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">haystack</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">count</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertInHTML\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>HTML フラグメント <code class=\"docutils literal notranslate\"><span class=\"pre\">needle</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">haystack</span></code> に含まれていることをアサートします。</p>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> という整数の引数が指定された場合、さらに <code class=\"docutils literal notranslate\"><span class=\"pre\">needle</span></code> の出現数が厳密に検証されます。</p>\n<p>ほとんどの場合、空白は無視され、属性の順序は重要ではありません。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertNotInHTML\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertNotInHTML</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">needle</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">haystack</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertNotInHTML\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>HTMLフラグメント <code class=\"docutils literal notranslate\"><span class=\"pre\">needle</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">haystack</span></code> に含まれて <em>いない</em> ことをアサートします。</p>\n<p>ほとんどの場合、空白は無視され、属性の順序は重要ではありません。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertJSONEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertJSONEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_data</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertJSONEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>JSON フラグメント <code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_data</span></code> が等しいことをアサートします。重要な部分は <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#module-json\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">json</span></code></a> ライブラリに委譲されているため、通常の JSON の重要でない空白のルールが適用されます。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertJSONNotEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertJSONNotEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_data</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertJSONNotEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>JSON フラグメント <code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_data</span></code> が等しく <em>ない</em> ことをアサートします。詳細は <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertJSONEqual\" title=\"django.test.SimpleTestCase.assertJSONEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertJSONEqual()</span></code></a> を参照してください。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.assertQuerySetEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertQuerySetEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">qs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">values</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">transform</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ordered</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.assertQuerySetEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>クエリセット <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> が特定の値のイテラブル <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> にマッチすることをアサートします。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code> が指定された場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> の各メンバに <code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code> を適用したリストと比較されます。</p>\n<p>デフォルトでは、比較は順序に依存します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> が暗黙の順序を提供しない場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ordered</span></code> パラメータを <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> に設定することで、比較を <code class=\"docutils literal notranslate\"><span class=\"pre\">collections.Counter</span></code> 比較に変更できます。順序が未定義の場合 (指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> が順序付けされておらず、複数の順序付けられた値との比較の場合)、<code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> が発生します。</p>\n<p>エラー時の出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code> 引数でカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.assertNumQueries\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertNumQueries</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">num</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.assertNumQueries\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">*args</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">**kwargs</span></code> で呼び出されると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">num</span></code> 個のデータベースクエリが実行されることをアサートします。</p>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;using&quot;</span></code> キーがあれば、それをクエリの数をチェックするためのデータベースのエイリアスとして使用します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertNumQueries</span><span class=\"p\">(</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">my_function</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;non_default_db&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> パラメータを持つ関数を呼び出したい場合は、呼び出しを <code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span></code> でラップして追加のパラメータを指定できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertNumQueries</span><span class=\"p\">(</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"k\">lambda</span><span class=\"p\">:</span> <span class=\"n\">my_function</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>コンテキストマネージャとしても使えます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertNumQueries</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">):</span>\n    <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Aaron&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Daniel&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"tagging-tests\">\n<span id=\"topics-tagging-tests\"></span><h3>テストにタグをつける<a class=\"heading-anchor\" href=\"#tagging-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テストにタグをつけることで、特定のサブセットを簡単に実行できるようになります。たとえば、速いテストや遅いテストにラベルをつけることができます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">tag</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SampleTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;fast&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_fast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;slow&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_slow</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;slow&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;core&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_slow_but_core</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>テストケースクラスにタグを付けることもできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;slow&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;core&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SampleTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>サブクラスは基底クラスからタグを継承し、メソッドはそのクラスからタグを継承します。以下の例を考えてみましょう。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SampleTestCaseChild</span><span class=\"p\">(</span><span class=\"n\">SampleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SampleTestCaseChild.test</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">'slow'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'core'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'bar'</span></code>, そして <code class=\"docutils literal notranslate\"><span class=\"pre\">'foo'</span></code> というラベルが付けられます。</p>\n<p>その後、どのテストを実行するか選択できます。例えば、速いテストのみを実行するには、次にようにします。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>--tag<span class=\"o\">=</span>fast\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> manage.py test --tag=fast\n</code></pre></div></div></div>\n<p>または、速いテストとコアなテスト (それが遅いとしても) を実行することもできます。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>--tag<span class=\"o\">=</span>fast<span class=\"w\"> </span>--tag<span class=\"o\">=</span>core\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> manage.py test --tag=fast --tag=core\n</code></pre></div></div></div>\n<p>タグによってテストを除外することもできます。遅くない場合にコアテストを実行するには、次にようにします。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>--tag<span class=\"o\">=</span>core<span class=\"w\"> </span>--exclude-tag<span class=\"o\">=</span>slow\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> manage.py test --tag=core --exclude-tag=slow\n</code></pre></div></div></div>\n<p><a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#cmdoption-test-exclude-tag\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">test</span> <span class=\"pre\">--exclude-tag</span></code></a> は <a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#cmdoption-test-tag\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">test</span> <span class=\"pre\">--tag</span></code></a> よりも優先されるので、テストに2つのタグがあり、片方を選択してもう片方を除外すると、テストは実行されません。</p>\n</section>\n</section>\n<section id=\"testing-asynchronous-code\">\n<span id=\"async-tests\"></span><h2>非同期コードをテストする<a class=\"heading-anchor\" href=\"#testing-asynchronous-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>単に非同期ビューの出力をテストしたいだけであれば、標準のテストクライアントが非同期ループの中で実行するので、追加の作業は必要ありません。</p>\n<p>しかし、Django プロジェクトで完全な非同期テストを書きたい場合、いくつかの点を考慮する必要があります。</p>\n<p>まず、テストはテストクラスの <code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">def</span></code> メソッドでなければなりません (非同期コンテキストを与えるため)。Django は自動的に <code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">def</span></code> テストを検出し、独自のイベントループで実行されるようにラップします。</p>\n<p>非同期関数からテストする場合は、非同期テストクライアントも使用する必要があります。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.AsyncClient</span></code> として、あるいは任意のテスト上で <code class=\"docutils literal notranslate\"><span class=\"pre\">self.async_client</span></code> として利用できます。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.AsyncClient\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AsyncClient</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">enforce_csrf_checks</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raise_request_exception</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">defaults</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.AsyncClient\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code> は同期 (通常の) テストクライアントと同じメソッドとシグネチャを持ちますが、 以下の例外があります。</p>\n<ul>\n<li><p>初期化では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> にある任意のキーワード引数が直接 ASGI スコープに追加されます。</p></li>\n<li><p>キーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> として渡されるヘッダには、同期クライアントが必要とする <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> プレフィックスを付けてはいけません (<a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a> を参照してください)。例えば、HTTPの <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept</span></code> ヘッダを設定する方法を示します。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">AsyncClient</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/details/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">},</span> <span class=\"n\">ACCEPT</span><span class=\"o\">=</span><span class=\"s2\">&quot;application/json&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code> を使用する場合、リクエストを行うあらゆるメソッドは await にする必要があります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">async</span> <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_my_thing</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">async_client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/some-url/&quot;</span><span class=\"p\">)</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>非同期クライアントは同期ビューを呼び出すこともできます。Django の <a class=\"reference internal\" href=\"/ja/6.1/topics/async/\"><span class=\"doc\">非同期のリクエスト経路</span></a> を通して実行され、両方に対応しています。<code class=\"docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code> を通して呼び出されたビューは、通常のクライアントが作成する <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIRequest</span></code> ではなく、<code class=\"docutils literal notranslate\"><span class=\"pre\">ASGIRequest</span></code> オブジェクトを <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> として取得します。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>テストデコレータを使う場合、正しく動作するためには非同期対応でなければなりません。Django のビルトインデコレータは正しく動作しますが、サードパーティ製のデコレータは実行されないように見えるかもしれません (実行フローの間違った部分を「ラップ」してしまい、あなたのテストは実行されません)。</p>\n<p>これらのデコレータを使用する必要がある場合は、テストメソッドをそれらの <em>内部で</em> <a class=\"reference internal\" href=\"/ja/6.1/topics/async/#asgiref.sync.async_to_sync\" title=\"asgiref.sync.async_to_sync\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">async_to_sync()</span></code></a> でデコレートするべきです。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">asgiref.sync</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">async_to_sync</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@mock</span><span class=\"o\">.</span><span class=\"n\">patch</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n    <span class=\"nd\">@async_to_sync</span>\n    <span class=\"k\">async</span> <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_my_thing</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"email-services\">\n<span id=\"topics-testing-email\"></span><h2>メールサービス<a class=\"heading-anchor\" href=\"#email-services\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If any of your code sends email using <a class=\"reference internal\" href=\"/ja/6.1/topics/email/\"><span class=\"doc\">Django's email functionality</span></a>, you probably don't want to send email each time you run a\ntest that exercises that code. For this reason, Django's test runner\nautomatically redirects all Django-sent email to an in-memory outbox. This lets\nyou test every aspect of sending email -- from the number of messages sent to\nthe contents of each message -- without actually sending the messages.</p>\n<p>The test runner accomplishes this by transparently replacing the\n<a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-MAILERS-BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">BACKEND</span></code></a> for each configured <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-MAILERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MAILERS</span></code></a>\nalias with the <code class=\"docutils literal notranslate\"><span class=\"pre\">'locmem'</span></code> <a class=\"reference internal\" href=\"/ja/6.1/topics/email/#topic-email-memory-backend\"><span class=\"std std-ref\">memory email backend</span></a>. (Don't worry -- this has no effect on any other\nemail senders outside of Django, such as your machine's mail server, if you're\nrunning one.)</p>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.django.core.mail.outbox\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.mail.</span></span><span class=\"sig-name descname\"><span class=\"pre\">outbox</span></span><a class=\"heading-anchor\" href=\"#django.core.mail.django.core.mail.outbox\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>During test running, each outgoing email is saved in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.mail.outbox</span></code>. This is a list of all\n<a class=\"reference internal\" href=\"/ja/6.1/topics/email/#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailMessage</span></code></a> instances that have been sent. The\n<code class=\"docutils literal notranslate\"><span class=\"pre\">outbox</span></code> attribute is a special attribute that is created <em>only</em> when the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">locmem</span></code> email backend is used. It doesn't normally exist as part of the\n<a class=\"reference internal\" href=\"/ja/6.1/topics/email/#module-django.core.mail\" title=\"django.core.mail: Helpers to send email.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.core.mail</span></code></a> module and you can't import it directly. The code below\nshows how to access this attribute correctly.</p>\n<p>以下は <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.mail.outbox</span></code> の長さと内容を調べるテスト例です。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mail</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EmailTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_send_email</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Send message.</span>\n        <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">send_mail</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;Subject here&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;Here is the message.&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;from@example.com&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s2\">&quot;to@example.com&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Test that one message has been sent.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">),</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Verify that the subject of the first message is correct.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">subject</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Subject here&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Verify the message was sent with the &quot;default&quot; mailer.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">sent_using</span><span class=\"p\">,</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">sent_using</span></code> attribute was added to messages in the outbox.</p>\n</aside>\n<p><a class=\"reference internal\" href=\"#emptying-test-outbox\"><span class=\"std std-ref\">前述の</span></a> ように、テストの送信トレイは Django <code class=\"docutils literal notranslate\"><span class=\"pre\">*TestCase</span></code> の各テストの開始時に空になります。手動で送信トレイを空にするには、<code class=\"docutils literal notranslate\"><span class=\"pre\">mail.outbox</span></code> に空のリストを代入してください。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mail</span>\n\n<span class=\"c1\"># Empty the test outbox</span>\n<span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n</code></pre></div>\n</section>\n<section id=\"management-commands\">\n<span id=\"topics-testing-management-commands\"></span><h2>管理コマンド<a class=\"heading-anchor\" href=\"#management-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>管理コマンドは、<a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django.core.management.call_command\" title=\"django.core.management.call_command\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">call_command()</span></code></a> 関数を使用してテストできます。以下のように、出力は <code class=\"docutils literal notranslate\"><span class=\"pre\">StringIO</span></code> インスタンスにリダイレクトできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">io</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StringIO</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">call_command</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ClosepollTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_command_output</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">out</span> <span class=\"o\">=</span> <span class=\"n\">StringIO</span><span class=\"p\">()</span>\n        <span class=\"n\">call_command</span><span class=\"p\">(</span><span class=\"s2\">&quot;closepoll&quot;</span><span class=\"p\">,</span> <span class=\"n\">poll_ids</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">stdout</span><span class=\"o\">=</span><span class=\"n\">out</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIn</span><span class=\"p\">(</span><span class=\"s1\">&#39;Successfully closed poll &quot;1&quot;&#39;</span><span class=\"p\">,</span> <span class=\"n\">out</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">())</span>\n</code></pre></div>\n</section>\n<section id=\"skipping-tests\">\n<span id=\"id3\"></span><h2>テストのスキップ<a class=\"heading-anchor\" href=\"#skipping-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>unittest ライブラリは <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.skipIf\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;skipIf</span></code></a> デコレータと <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.skipUnless\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;skipUnless</span></code></a> デコレータを提供しており、特定の条件下でテストが失敗することがわかっている場合にテストをスキップできます。</p>\n<p>例えば、テストを成功させるために特定のオプションライブラリが必要な場合に、テストケースを <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.skipIf\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;skipIf</span></code></a> でデコレートすることができます。そうすると、テストランナーはテストを失敗させたり完全に省略したりする代わりに、テストが実行されなかったこととその理由を報告します。</p>\n<p>これらのテストスキップ動作を補うために、 Django はさらに 2 つのスキップデコレータを提供しています。一般的な真偽値をテストする代わりに、これらのデコレータはデータベースの機能をチェックし、データベースが特定の機能をサポートしていなければテストをスキップします。</p>\n<p>デコレータは、データベース機能を表す文字列識別子を使用します。この文字列はデータベース接続の features クラスの属性に対応します。 <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/django/db/backends/base/features.py\">django.db.backends.base.features.BaseDatabaseFeatures クラス</a> に、テストをスキップするベースとして使用できるデータベース機能の完全なリストがあります。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.skipIfDBFeature\">\n<span class=\"sig-name descname\"><span class=\"pre\">skipIfDBFeature</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">feature_name_strings</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.skipIfDBFeature\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>指定したデータベース機能がすべてサポートされている場合は、デコレートされたテストや <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> をスキップします。</p>\n<p>例えば、データベースがトランザクションをサポートしている場合、以下のテストは実行されません (例えば、PostgreSQLでは実行 <em>されません</em> が、MyISAMテーブルを持つMySQLでは実行されます)。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@skipIfDBFeature</span><span class=\"p\">(</span><span class=\"s2\">&quot;supports_transactions&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_transaction_behavior</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ... conditional test code</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.skipUnlessDBFeature\">\n<span class=\"sig-name descname\"><span class=\"pre\">skipUnlessDBFeature</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">feature_name_strings</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.skipUnlessDBFeature\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>指定したデータベース機能がサポートされていない場合は、デコレートされたテストや <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> をスキップします。</p>\n<p>例えば、以下のテストはデータベースがトランザクションをサポートしている場合だけ実行されます (たとえば、PostgreSQLでは実行されますが、MyISAMテーブルを持つMySQLでは実行 <em>されません</em>)。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@skipUnlessDBFeature</span><span class=\"p\">(</span><span class=\"s2\">&quot;supports_transactions&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_transaction_behavior</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ... conditional test code</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n</section>","rootId":"testing-tools","toc":[{"title":"テストクライアント","anchor":"the-test-client","children":[{"title":"概要と簡単な例","anchor":"overview-and-a-quick-example","children":[]},{"title":"リクエストの作成","anchor":"making-requests","children":[]},{"title":"レスポンスのテスト","anchor":"testing-responses","children":[]},{"title":"例外","anchor":"exceptions","children":[]},{"title":"永続的なステート","anchor":"persistent-state","children":[]},{"title":"言語の設定","anchor":"setting-the-language","children":[]},{"title":"カスタマイズ例","anchor":"example","children":[]}]},{"title":"提供されるテストケースのクラス","anchor":"provided-test-case-classes","children":[{"title":"SimpleTestCase","anchor":"simpletestcase","children":[]},{"title":"TransactionTestCase","anchor":"transactiontestcase","children":[]},{"title":"TestCase","anchor":"testcase","children":[]},{"title":"LiveServerTestCase","anchor":"liveservertestcase","children":[]}]},{"title":"テストケースの機能","anchor":"test-cases-features","children":[{"title":"デフォルトのテストクライアント","anchor":"default-test-client","children":[]},{"title":"テストクライアントをカスタムする","anchor":"customizing-the-test-client","children":[]},{"title":"フィクスチャのロード","anchor":"fixture-loading","children":[]},{"title":"URLconf の設定","anchor":"urlconf-configuration","children":[]},{"title":"マルチデータベースのサポート","anchor":"multi-database-support","children":[]},{"title":"設定のオーバーライド","anchor":"overriding-settings","children":[]},{"title":"アプリの隔離","anchor":"isolating-apps","children":[]},{"title":"テスト用の送信トレイを空にする","anchor":"emptying-the-test-outbox","children":[]},{"title":"アサーション","anchor":"assertions","children":[]},{"title":"テストにタグをつける","anchor":"tagging-tests","children":[]}]},{"title":"非同期コードをテストする","anchor":"testing-asynchronous-code","children":[]},{"title":"メールサービス","anchor":"email-services","children":[]},{"title":"管理コマンド","anchor":"management-commands","children":[]},{"title":"テストのスキップ","anchor":"skipping-tests","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/6.1/topics/"},{"docname":"topics/testing/index","title":"Django におけるテスト","url":"/ja/6.1/topics/testing/"}],"prev":{"docname":"topics/testing/overview","title":"テストを書いて実行する","url":"/ja/6.1/topics/testing/overview/"},"next":{"docname":"topics/testing/advanced","title":"テストに関する高度なトピック","url":"/ja/6.1/topics/testing/advanced/"},"formats":{"html":"/ja/6.1/topics/testing/tools/","markdown":"/ja/6.1/topics/testing/tools.md","json":"/ja/6.1/topics/testing/tools.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/testing/tools.txt","official":"https://docs.djangoproject.com/ja/6.1/topics/testing/tools/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}