{"title":"유닛 테스트","version":"4.0","locale":"ko","docname":"internals/contributing/writing-code/unit-tests","url":"/ko/4.0/internals/contributing/writing-code/unit-tests/","canonical":"https://djangodocs.dev/ko/4.0/internals/contributing/writing-code/unit-tests/","summary":"장고는 코드베이스의 “테스트” 디렉토리에 자체 테스트 스위트가 있습니다. 우리의 정책은 모든 시험을 항상 통과하도록 하는 것입니다.","html":"<h1>유닛 테스트<a class=\"heading-anchor\" href=\"#unit-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>장고는 코드베이스의 “테스트” 디렉토리에 자체 테스트 스위트가 있습니다. 우리의 정책은 모든 시험을 항상 통과하도록 하는 것입니다.</p>\n<p>테스트 제품군에 대한 모든 기여에 감사드립니다!</p>\n<p>Django 테스트는 모두 Django와 함께 제공되는 테스트 애플리케이션을 위한 테스트 인프라를 사용합니다. 새로운 테스트 작성 방법에 대한 설명은 :doc:’/topics/testing/개요’를 참조하십시오.</p>\n<section id=\"running-the-unit-tests\">\n<span id=\"running-unit-tests\"></span><h2>장치 테스트를 실행<a class=\"heading-anchor\" href=\"#running-the-unit-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"quickstart\">\n<h3>빠른시작<a class=\"heading-anchor\" href=\"#quickstart\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>우선 장고를 깃허브 &lt;<a class=\"reference external\" href=\"https://github.com/django/django/fork\">https://github.com/django/django/fork</a>&gt;에서 포크하세요</p>\n<p>둘째, 가상 환경을 생성하고 활성화합니다. 자세한 내용은 :doc:’기여 튜토리얼’을 참조하십시오.</p>\n<p>그런 다음 포크를 복제하고 몇 가지 요구 사항을 설치한 다음 테스트를 실행하십시오.</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>git clone https://github.com/YourGitHubName/django.git django-repo\n<span class=\"gp\">$ </span><span class=\"nb\">cd</span> django-repo/tests\n<span class=\"gp\">$ </span>python -m pip install -e ..\n<span class=\"gp\">$ </span>python -m pip install -r requirements/py3.txt\n<span class=\"gp\">$ </span>./runtests.py\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> git clone https://github.com/YourGitHubName/django.git django-repo\n<span class=\"gp\">...\\&gt;</span> <span class=\"k\">cd</span> django-repo\\tests\n<span class=\"gp\">...\\&gt;</span> py -m pip install -e ..\n<span class=\"gp\">...\\&gt;</span> py -m pip install -r requirements\\py3.txt\n<span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n<p>요구 사항을 설치하려면 컴퓨터에 설치되지 않은 일부 운영 체제 패키지가 필요할 수 있습니다. 일반적으로 오류 메시지의 마지막 줄에 대해 웹 검색을 수행하여 설치할 패키지를 확인할 수 있습니다. 필요한 경우 검색 쿼리에 운영 체제를 추가해 보십시오.</p>\n<p>요구 사항을 설치하는 데 문제가 있으면 해당 단계를 건너뛸 수 있습니다. 선택적 테스트 종속성 설치에 대한 자세한 내용은:ref:’running-unit-tests-dependencies’를 참조하십시오. 선택적 종속성이 설치되어 있지 않으면 종속성이 필요한 테스트는 건너뜁니다.</p>\n<p>테스트를 실행하려면 사용할 데이터베이스를 정의하는 Django 설정 모듈이 필요합니다. 시작할 수 있도록 Django는 SQLite 데이터베이스를 사용하는 샘플 설정 모듈을 제공하고 사용합니다. 다른 설정 모듈을 사용하여 다른 데이터베이스로 테스트를 실행하는 방법에 대한 자세한 내용은:ref:’running-unit-tests-settings’를 참조하십시오.</p>\n<p>문제가 있나요? 몇 가지 일반적인 문제는:ref:’문제 해결 장치 테스트’를 참조하십시오.</p>\n</section>\n<section id=\"running-tests-using-tox\">\n<h3>“tox”를 사용하여 테스트를 실행합니다.<a class=\"heading-anchor\" href=\"#running-tests-using-tox\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>“Tox &lt;<a class=\"reference external\" href=\"https://tox.wiki/\">https://tox.wiki/</a>&gt;_는 서로 다른 가상 환경에서 테스트를 실행하기 위한 도구입니다. Django에는 빌드 서버가 풀 요청에 대해 수행하는 일부 검사를 자동화하는 기본 “tox.ini”가 포함되어 있습니다. 장치 테스트 및 기타 검사(예: :ref:’import sorting’, :ref:’documentation spelling checker’ 및 :ref:’code formating’)를 실행하려면 Django 원본 트리의 임의의 위치에서 “tox” 명령을 설치하고 실행합니다.</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>python -m pip install tox\n<span class=\"gp\">$ </span>tox\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> py -m pip install tox\n<span class=\"gp\">...\\&gt;</span> tox\n</code></pre></div></div></div>\n<p>기본적으로 “tox”는 SQLite에 대한 번들 테스트 설정 파일, “black”, “flake8”, “isort” 및 문서 철자 검사기와 함께 테스트 제품군을 실행합니다. 이 설명서의 다른 부분에 언급된 시스템 종속성 외에도 명령어 “python3”은 사용자의 경로에 있어야 하며 적절한 버전의 Python에 연결되어 있어야 합니다. 기본 환경 목록은 다음과 같습니다.</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>tox -l\n<span class=\"go\">py3</span>\n<span class=\"go\">black</span>\n<span class=\"go\">flake8&gt;=3.7.0</span>\n<span class=\"go\">docs</span>\n<span class=\"go\">isort&gt;=5.1.0</span>\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> tox -l\n<span class=\"go\">py3</span>\n<span class=\"go\">black</span>\n<span class=\"gp\">flake8&gt;</span>=3.7.0\n<span class=\"go\">docs</span>\n<span class=\"gp\">isort&gt;</span>=5.1.0\n</code></pre></div></div></div>\n<section id=\"testing-other-python-versions-and-database-backends\">\n<h4>다른 Python 버전 및 데이터베이스 백엔드를 테스트합니다.<a class=\"heading-anchor\" href=\"#testing-other-python-versions-and-database-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>기본 환경 외에도 “tox”는 다른 버전의 Python 및 다른 데이터베이스 백엔드에 대한 단위 테스트 실행을 지원합니다. 그러나 Django의 테스트 스위트는 SQLite 이외의 데이터베이스 백엔드에 대한 설정 파일을 번들로 제공하지 않으므로 :ref:”사용자 고유의 테스트 설정”을 만들고 제공해야 합니다. 예를 들어 Postgre를 사용하여 Python 3.9에서 테스트를 실행하려면 다음과 같이 하십시오.SQL: 입니다.</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>tox -e py39-postgres -- --settings<span class=\"o\">=</span>my_postgres_settings\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> tox -e py39-postgres -- --settings=my_postgres_settings\n</code></pre></div></div></div>\n<p>이 명령은 Python 3.9 가상 환경을 설정하고 Django의 테스트 제품군 종속성(Postgre용 종속성 포함)을 설치합니다.SQL), 그리고 “테스트 실행”을 호출합니다.py는 제공된 인수(이 경우 ‘’–settings=my_postgres_settings’’)를 사용합니다.</p>\n<p>이 문서의 나머지 부분에서는 “tox” 없이 테스트를 실행하는 명령을 보여 주지만 “runtests.py”에 전달되는 모든 옵션은 위와 같이 인수 목록에 “<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>–“를 붙임으로써 “tox”에 전달될 수 있습니다.</p>\n<p>설정된 경우 Tox는 <span class=\"target\" id=\"index-4\"></span><a class=\"reference internal\" href=\"/ko/4.0/topics/settings/#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\">DJANGO_SETTINGS_MODULE</code></a> 환경 변수도 존중합니다. 예를 들어, 다음은 위의 명령과 동일합니다.</p>\n<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><span class=\"nv\">DJANGO_SETTINGS_MODULE</span><span class=\"o\">=</span>my_postgres_settings tox -e py39-postgres\n</code></pre></div>\n<p>Windows 사용자는 다음을 사용해야 합니다.</p>\n<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 code\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"k\">set</span> <span class=\"nv\">DJANGO_SETTINGS_MODULE</span><span class=\"p\">=</span>my_postgres_settings\n<span class=\"gp\">...\\&gt;</span> tox -e py39-postgres\n</code></pre></div>\n</section>\n<section id=\"running-the-javascript-tests\">\n<h4>JavaScript 테스트를 실행합니다.<a class=\"heading-anchor\" href=\"#running-the-javascript-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django에는 특정 기여 앱의 기능을 위한 :ref:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>JavaScript 세트가 포함되어 있습니다. JavaScript 테스트는 “Node.js”를 설치해야 하고 대부분의 패치에 필요하지 않기 때문에 기본적으로 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>tox``를 사용하여 실행되지 않습니다. “tox”를 사용하여 JavaScript 테스트를 실행하려면 다음과 같이 하십시오.</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>tox -e javascript\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> tox -e javascript\n</code></pre></div></div></div>\n<p>이 명령은 테스트 요구 사항이 최신인지 확인하기 위해 “npm install”을 실행한 다음 “npm test”를 실행합니다.</p>\n</section>\n</section>\n<section id=\"running-tests-using-django-docker-box\">\n<h3>‘’장고-도커박스’’를 사용하여 테스트를 실행합니다.<a class=\"heading-anchor\" href=\"#running-tests-using-django-docker-box\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>“django-docker-box”_를 사용하면 지원되는 모든 데이터베이스 및 python 버전에서 Django의 테스트 제품군을 실행할 수 있습니다. 설치 및 사용 지침은 ‘django-docker-box’_ 프로젝트 페이지를 참조하십시오.</p>\n</section>\n<section id=\"using-another-settings-module\">\n<span id=\"running-unit-tests-settings\"></span><h3>다른 ‘’설정’’ 모듈을 사용합니다.<a class=\"heading-anchor\" href=\"#using-another-settings-module\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>포함된 설정 모듈(‘’tests/test_sqlite.py’’)을 사용하여 SQLite를 사용하여 테스트 제품군을 실행할 수 있습니다. 다른 데이터베이스를 사용하여 테스트를 실행하려면 자체 설정 파일을 정의해야 합니다. ‘’기여’’와 같은 몇 가지 시험들이 있습니다.postgres²는 특정 데이터베이스 백엔드에 한정되며 다른 백엔드로 실행할 경우 건너뜁니다. 일부 테스트는 특정 데이터베이스 백엔드에서 건너뛰거나 실패할 것으로 예상됩니다(각 백엔드의 “DatabaseFeatures.django_test_skips” 및 “DatabaseFeatures.django_testpected_fails” 참조).</p>\n<p>다른 설정으로 테스트를 실행하려면 모듈이 :envvar:’PYthonPATH’에 있는지 확인하고 ‘–settings’로 모듈을 통과시킵니다.</p>\n<p>: 설정은 다음과 같습니다.모든 테스트 설정 모듈의 “DATABASES” 설정은 두 개의 데이터베이스를 정의해야 합니다.</p>\n<ul class=\"simple\">\n<li><p>‘’’기본’’’입니다. 이 데이터베이스는 기본 테스트에 사용할 백엔드를 사용해야 합니다.</p></li>\n<li><p>별칭이 ‘’기타’’인 데이터베이스입니다. “기타” 데이터베이스는 쿼리를 다른 데이터베이스로 전송할 수 있는지 테스트하는 데 사용됩니다. 이 데이터베이스는 “default”와 동일한 백엔드를 사용해야 하며 이름이 달라야 합니다.</p></li>\n</ul>\n<p>SQLite가 아닌 백엔드를 사용하는 경우 각 데이터베이스에 대한 기타 세부 정보를 제공해야 합니다.</p>\n<ul class=\"simple\">\n<li><p>: 설정은 다음과 같습니다.’USER’ 옵션은 데이터베이스에 대한 기존 사용자 계정을 지정해야 합니다. 해당 사용자는 테스트 데이터베이스를 만들려면 “CREATE DATABASE”를 실행할 수 있는 권한이 필요합니다.</p></li>\n<li><p>:설정:’입니다.PASSWORD’ 옵션은 :setting에 대한 암호를 제공해야 합니다.지정된 ‘USER’입니다.</p></li>\n</ul>\n<p>테스트 데이터베이스는 “<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">test_</span></a>” 값을 :setting 값에 “<a href=\"#id5\"><span class=\"problematic\" id=\"id6\">test_</span></a>”로 추가하여 이름을 가져옵니다.:setting에 정의된 데이터베이스에 대한 “NAME” 설정은 다음과 같습니다.’데이터베이스’입니다. 이러한 테스트 데이터베이스는 테스트가 완료되면 삭제됩니다.</p>\n<p>또한 데이터베이스에서 UTF-8을 기본 문자 집합으로 사용해야 합니다. 데이터베이스 서버가 UTF-8을 기본 문자 집합으로 사용하지 않는 경우, 해당 데이터베이스의 테스트 설정 사전에  :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>CHARSET 값을 포함해야 합니다.</p>\n</section>\n<section id=\"running-only-some-of-the-tests\">\n<span id=\"runtests-specifying-labels\"></span><h3>일부 테스트만 실행합니다.<a class=\"heading-anchor\" href=\"#running-only-some-of-the-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django의 전체 테스트 제품군을 실행하는 데 시간이 오래 걸리며, 예를 들어 모든 테스트를 Django에 추가했을 때 다른 모든 테스트를 실행하지 않고 빠르게 실행하고자 하는 경우 모든 테스트를 실행하는 것은 중복될 수 있습니다. 명령줄에서 테스트 모듈의 이름을 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>runtests.py``에 추가하여 단위 테스트의 하위 집합을 실행할 수 있습니다.</p>\n<p>예를 들어 일반 관계 및 국제화에 대해서만 테스트를 실행하려면 다음을 입력합니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-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>./runtests.py --settings<span class=\"o\">=</span>path.to.settings generic_relations i18n\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-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> runtests.py --settings=path.to.settings generic_relations i18n\n</code></pre></div></div></div>\n<p>개별 시험의 이름은 어떻게 알 수 있나요? “tests/’를 찾습니다. 각 디렉토리 이름은 테스트 이름입니다.</p>\n<p>특정 테스트 클래스만 실행하려면 개별 테스트 클래스에 대한 경로 목록을 지정할 수 있습니다. 예를 들어 ‘’i18n’’’ 모듈의 ‘’번역’을 실행하려면 타입:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-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>./runtests.py --settings<span class=\"o\">=</span>path.to.settings i18n.tests.TranslationTests\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-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> runtests.py --settings=path.to.settings i18n.tests.TranslationTests\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-7-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>./runtests.py --settings<span class=\"o\">=</span>path.to.settings i18n.tests.TranslationTests.test_lazy_objects\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-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> runtests.py --settings=path.to.settings i18n.tests.TranslationTests.test_lazy_objects\n</code></pre></div></div></div>\n<p>“–start-at’ 옵션을 사용하여 지정된 최상위 모듈에서 테스트를 시작할 수 있습니다. 예를 들어 다음과 같습니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-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>./runtests.py --start-at<span class=\"o\">=</span>wsgi\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-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> runtests.py --start-at=wsgi\n</code></pre></div></div></div>\n<p>또한 ‘’–start-after’’’ 옵션을 사용하여 지정된 최상위 모듈 이후에 테스트를 실행할 수도 있습니다. 예를 들어 다음과 같습니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-9-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>./runtests.py --start-after<span class=\"o\">=</span>wsgi\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-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> runtests.py --start-after=wsgi\n</code></pre></div></div></div>\n<p>‘’’–reverse’’’ 옵션은 ‘’’–start-at’’’ 또는 ‘’’–start-after’’’ 옵션에는 영향을 미치지 않습니다. 또한 이러한 옵션은 테스트 레이블과 함께 사용할 수 없습니다.</p>\n</section>\n<section id=\"running-the-selenium-tests\">\n<h3>Selenium 테스트를 실행합니다.<a class=\"heading-anchor\" href=\"#running-the-selenium-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>일부 테스트에는 Selenium과 웹 브라우저가 필요합니다. 이러한 테스트를 실행하려면 <a class=\"reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a> 패키지를 설치하고 ‘’–selenium=filename’’ 옵션을 사용하여 테스트를 실행해야 합니다. 예를 들어 Firefox 및 Google Chrome이 설치된 경우 다음을 수행합니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-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>./runtests.py --selenium<span class=\"o\">=</span>firefox,chrome\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-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> runtests.py --selenium=firefox,chrome\n</code></pre></div></div></div>\n<p>셀레늄을 보세요.webdriver’_package에서 사용할 수 있는 브라우저 목록입니다.</p>\n<p>‘’–selenium’’을 지정하면 ‘’–selenium’’이 자동으로 셀레늄이 필요한 테스트만 실행되도록 설정됩니다.</p>\n<p>일부 브라우저(예: Chrome 또는 Firefox)는 헤드리스 테스트를 지원하므로 더 빠르고 안정적입니다. 이 모드를 활성화하려면 “–headless” 옵션을 추가합니다.</p>\n</section>\n<section id=\"running-all-the-tests\">\n<span id=\"running-unit-tests-dependencies\"></span><h3>모든 테스트를 실행합니다.<a class=\"heading-anchor\" href=\"#running-all-the-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>전체 테스트 제품군을 실행하려면 다음과 같은 여러 종속성을 설치해야 합니다.</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/aiosmtpd/\">aiosmtpd</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/argon2-cffi/\">argon2-cffi</a> 19.1.0+</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/asgiref/\">asgiref</a> 3.4.1+ (required)</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/bcrypt/\">bcrypt</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/colorama/\">colorama</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/docutils/\">docutils</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/geoip2/\">geoip2</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/Jinja2/\">jinja2</a> 2.7+</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/numpy/\">numpy</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/Pillow/\">Pillow</a> 6.2.0+</p></li>\n<li><p><a class=\"reference external\" href=\"https://pyyaml.org/wiki/PyYAML\">PyYAML</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/pytz/\">pytz</a> (required)</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/pywatchman/\">pywatchman</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/redis/\">redis</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/setuptools/\">setuptools</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://memcached.org/\">memcached</a>, a :ref:’지원되는 Python 바인딩’.</p></li>\n<li><p><a class=\"reference external\" href=\"https://www.gnu.org/software/gettext/manual/gettext.html\">gettext</a> (<a class=\"reference internal\" href=\"/ko/4.0/topics/i18n/translation/#gettext-on-windows\"><span class=\"std std-ref\">gettext on Windows</span></a>)</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/sqlparse/\">sqlparse</a> 0.2.2+ (required)</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/tblib/\">tblib</a> 1.5.0+</p></li>\n</ul>\n<p>Django 원본 트리의 “tests/requirements” 디렉토리에 있는 “pip requirements files”_에서 이러한 종속성을 찾아 다음과 같이 설치할 수 있습니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-11-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 -m pip install -r tests/requirements/py3.txt\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-11-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 -r tests\\requirements\\py3.txt\n</code></pre></div></div></div>\n<p>설치 중 오류가 발생했다면, 시스템이 하나 이상의 Python 패키지에 대한 의존성을 해결하지 못한 것일 수 있습니다. 설치에 실패한 패키지의 문서를 참조하거나 오류 메시지를 웹에서 검색하십시오.</p>\n<p>“oracle”을 사용하여 원하는 데이터베이스 어댑터를 설치할 수도 있습니다.txt,, ‘’’예’’’입니다.txt, 또는 ‘’postgres’’입니다.txt``입니다.</p>\n<p>memcached 또는 Redis 캐시 백엔드를 테스트하려면 :setting도 정의해야 합니다.memcached 또는 Redis 인스턴스를 각각 가리키는 “CACHES” 설정입니다.</p>\n<p>GeoDjango 테스트를 실행하려면 :doc:’공간 데이터베이스를 설정하고 Geospacial Libraries를 설치해야 합니다.</p>\n<p>이러한 각 종속성은 선택 사항입니다. 누락된 테스트가 있으면 관련 테스트를 건너뜁니다.</p>\n<p>일부 자동 재로드 테스트를 실행하려면 <a class=\"reference external\" href=\"https://facebook.github.io/watchman/\">Watchman</a> 서비스를 설치해야 합니다.</p>\n</section>\n<section id=\"code-coverage\">\n<h3>코드 적용 범위<a class=\"heading-anchor\" href=\"#code-coverage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>기여자는 추가 테스트가 필요한 영역을 식별하기 위해 테스트 제품군에 대한 적용 범위를 실행할 것을 권장합니다. 커버리지 도구 설치 및 사용은 :ref:’테스트 코드 커버리지’에 설명되어 있습니다.</p>\n<p>적용 범위는 정확한 통계를 얻기 위해 단일 프로세스로 실행되어야 합니다. 표준 테스트 설정을 사용하여 Django 테스트 제품군에 대한 적용 범위를 실행하려면 다음과 같이 하십시오.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-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>coverage run ./runtests.py --settings<span class=\"o\">=</span>test_sqlite --parallel<span class=\"o\">=</span><span class=\"m\">1</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-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> coverage run runtests.py --settings=test_sqlite --parallel=1\n</code></pre></div></div></div>\n<p>적용 범위를 실행한 후 다음을 실행하여 html 보고서를 생성합니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-13-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>coverage html\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-13-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> coverage html\n</code></pre></div></div></div>\n<p>Django 테스트에 대한 적용 범위를 실행할 때 포함된 “.coverager” 설정 파일은 “coverage_html”을 보고서의 출력 디렉터리로 정의하고 결과와 관련이 없는 여러 디렉터리(테스트 코드 또는 Django에 포함된 외부 코드)도 제외합니다.</p>\n</section>\n</section>\n<section id=\"contrib-apps\">\n<span id=\"id1\"></span><h2>기여 어플리케이션<a class=\"heading-anchor\" href=\"#contrib-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>기여 앱에 대한 테스트는 일반적으로 “_tests” 아래에 있는 “tests/” 디렉터리에서 찾을 수 있습니다. 예를 들어 ‘’contrib.auth’’에 대한 검정은(는) ‘’’<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>tests/auth_tests’’’에 있습니다.</p>\n</section>\n<section id=\"troubleshooting\">\n<span id=\"troubleshooting-unit-tests\"></span><h2>문제해결<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"test-suite-hangs-or-shows-failures-on-main-branch\">\n<h3>테스트 제품군이 ‘’main’’ 분기에 중단되거나 오류가 표시됩니다.<a class=\"heading-anchor\" href=\"#test-suite-hangs-or-shows-failures-on-main-branch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>이전 버전에는 테스트 제품군의 실패 또는 행업 원인이 될 수 있는 버그가 종종 있으므로 a:ref:’supported Python version 의 최신 포인트 릴리스가 있는지 확인합니다.</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>macOS**(High Sierra 이상 버전)에서는 다음 메시지가 기록되고 그 후에 테스트가 중단될 수 있습니다.</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>objc<span class=\"p\">[</span><span class=\"mi\">42074</span><span class=\"p\">]:</span> <span class=\"o\">+</span><span class=\"p\">[</span>__NSPlaceholderDate initialize<span class=\"p\">]</span> may have been <span class=\"ow\">in</span> progress <span class=\"ow\">in</span>\nanother thread when fork<span class=\"p\">()</span> was called<span class=\"o\">.</span>\n</code></pre></div>\n<p>이 문제를 방지하려면 다음과 같이 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>OBJC_DISABLE_INITIALIZE_FORK_SAFETY` 환경 변수를 설정하십시오.</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>$ OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES ./runtests.py\n</code></pre></div>\n<p>Or add <code class=\"docutils literal notranslate\">export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES</code> to your shell’s\nstartup file (e.g. <code class=\"docutils literal notranslate\">~/.profile</code>).</p>\n</section>\n<section id=\"many-test-failures-with-unicodeencodeerror\">\n<h3>‘’UnicodeError’’로 많은 테스트가 실패합니다.<a class=\"heading-anchor\" href=\"#many-test-failures-with-unicodeencodeerror\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>“locales” 패키지가 설치되지 않은 경우 일부 테스트는 “UnicodeError”와 함께 실패합니다.</p>\n<p>예를 들어 Debian 기반 시스템에서 다음을 실행하여 이 문제를 해결할 수 있습니다.</p>\n<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>apt-get install locales\n<span class=\"gp\">$ </span>dpkg-reconfigure locales\n</code></pre></div>\n<p>macOS 시스템의 경우 셸의 로케일을 구성하여 이 문제를 해결할 수 있습니다.</p>\n<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><span class=\"nb\">export</span> <span class=\"nv\">LANG</span><span class=\"o\">=</span><span class=\"s2\">&quot;en_US.UTF-8&quot;</span>\n<span class=\"gp\">$ </span><span class=\"nb\">export</span> <span class=\"nv\">LC_ALL</span><span class=\"o\">=</span><span class=\"s2\">&quot;en_US.UTF-8&quot;</span>\n</code></pre></div>\n<p>“locale” 명령을 실행하여 변경 내용을 확인합니다. 선택적으로 이러한 내보내기 명령을 셸의 시작 파일(예: Bash의 경우 “~/.bashrc’’)에 추가하여 다시 입력할 필요가 없도록 합니다.</p>\n</section>\n<section id=\"tests-that-only-fail-in-combination\">\n<h3>조합상으로만 실패하는 테스트입니다.<a class=\"heading-anchor\" href=\"#tests-that-only-fail-in-combination\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>별도로 실행했을 때 테스트는 통과했지만 전체 제품군 내에서 실패할 경우 문제를 분석하는 데 도움이 되는 몇 가지 도구가 있습니다.</p>\n<p><code class=\"docutils literal notranslate\">runtests.py``의 ``--bisect</code> 옵션은 실패 테스트를 실행하는 동시에 각 반복에서 함께 실행되는 테스트 세트를 절반으로 줄여 실패와 관련이 있을 수 있는 적은 수의 테스트를 식별할 수 있게 합니다.</p>\n<p>예를 들어, 자체적으로 작동하는 실패한 테스트가 ‘’ModelTest.test_eq’’라고 가정하고 다음을 사용합니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-14-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>./runtests.py --bisect basic.tests.ModelTest.test_eq\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-14-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> runtests.py --bisect basic.tests.ModelTest.test_eq\n</code></pre></div></div></div>\n<p>지정된 테스트를 방해하는 테스트를 결정합니다. 먼저 테스트 스위트의 전반부에서 테스트를 실행합니다. 오류가 발생하면 테스트 스위트의 전반부가 두 그룹으로 분할되고 각 그룹이 지정된 테스트와 함께 실행됩니다. 테스트 스위트의 전반부에 고장이 없는 경우, 테스트 스위트의 후반부는 앞에서 설명한 대로 지정된 테스트와 함께 실행되고 적절히 분할됩니다. 이 프로세스는 실패한 테스트 집합이 최소화될 때까지 반복됩니다.</p>\n<p>“–pair” 옵션은 제품군의 다른 모든 테스트와 함께 주어진 테스트를 실행하므로 다른 테스트에 실패의 원인이 되는 부작용이 있는지 확인할 수 있습니다. 그래서:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-15-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>./runtests.py --pair basic.tests.ModelTest.test_eq\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-15-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> runtests.py --pair basic.tests.ModelTest.test_eq\n</code></pre></div></div></div>\n<p>“test_eq”는 모든 테스트 레이블과 쌍을 이룹니다.</p>\n<p>“–bisect” 및 “–pair”를 모두 사용할 경우, 어떤 사례가 실패의 원인이 될 수 있는지 이미 의심하는 경우, 첫 번째 테스트 이후에 :ref:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>specifying further test labels <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>가 교차 분석하도록 테스트를 제한할 수 있습니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-16-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>./runtests.py --pair basic.tests.ModelTest.test_eq queries transactions\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-16-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> runtests.py --pair basic.tests.ModelTest.test_eq queries transactions\n</code></pre></div></div></div>\n<p>또한 “–shuffle” 및 “–reverse” 옵션을 사용하여 임의의 테스트 세트를 랜덤 또는 역순으로 실행할 수 있습니다. 이렇게 하면 테스트를 다른 순서로 실행해도 문제가 발생하지 않는지 확인할 수 있습니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-17-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>./runtests.py basic --shuffle\n<span class=\"gp\">$ </span>./runtests.py basic --reverse\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-17-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> runtests.py basic --shuffle\n<span class=\"gp\">...\\&gt;</span> runtests.py basic --reverse\n</code></pre></div></div></div>\n</section>\n<section id=\"seeing-the-sql-queries-run-during-a-test\">\n<h3>테스트 중에 실행되는 SQL 쿼리를 봅니다.<a class=\"heading-anchor\" href=\"#seeing-the-sql-queries-run-during-a-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>실패한 테스트에서 실행 중인 SQL을 검사하려면 A 옵션을 사용하여 “–debug-sql”을 설정할 수 있습니다. 이 값을 “–verbosity=2”와 결합하면 모든 SQL 쿼리가 출력됩니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-18-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>./runtests.py basic --debug-sql\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-18-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> runtests.py basic --debug-sql\n</code></pre></div></div></div>\n</section>\n<section id=\"seeing-the-full-traceback-of-a-test-failure\">\n<h3>테스트 실패의 전체 추적 결과를 봅니다.<a class=\"heading-anchor\" href=\"#seeing-the-full-traceback-of-a-test-failure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>기본적으로 테스트는 코어당 하나의 프로세스와 병렬로 실행됩니다. 그러나 테스트가 병렬로 실행되면 테스트 실패에 대한 잘린 추적만 볼 수 있습니다. “–parallel” 옵션을 사용하여 이 동작을 조정할 수 있습니다.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-19-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>./runtests.py basic --parallel<span class=\"o\">=</span><span class=\"m\">1</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-19-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> runtests.py basic --parallel=1\n</code></pre></div></div></div>\n<p>:envvar를 사용할 수도 있습니다.이 목적을 위한 “DJANGO_TEST_PROCESS” 환경 변수입니다.</p>\n</section>\n</section>\n<section id=\"tips-for-writing-tests\">\n<h2>쓰기 테스트에 대한 팁입니다.<a class=\"heading-anchor\" href=\"#tips-for-writing-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"isolating-model-registration\">\n<h3>모델 등록을 격리합니다.<a class=\"heading-anchor\" href=\"#isolating-model-registration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>글로벌 :attr:’~django.apps.apps의 레지스트리를 오염시키지 않고 불필요한 테이블 생성을 방지하려면 테스트 방법에 정의된 모델을 임시 “Apps” 인스턴스에 바인딩해야 합니다.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.apps.registry</span> <span class=\"kn\">import</span> Apps\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n\n<span class=\"k\">class</span> <span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        test_apps <span class=\"o\">=</span> Apps<span class=\"p\">([</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">])</span>\n\n        <span class=\"k\">class</span> <span class=\"nc\">TestModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n                apps <span class=\"o\">=</span> test_apps\n        <span class=\"o\">...</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.isolate_apps\">\n<span class=\"sig-prename descclassname\">django.test.utils.</span><span class=\"sig-name descname\">isolate_apps</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>app_labels</em>, <em class=\"sig-param\">attr_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">kwarg_name<span class=\"o\">=</span><span class=\"default_value\">None</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></dd></dl>\n\n<p>이 패턴은 보일러 플레이트를 많이 사용하기 때문에 Django는 :func:’~django.test.utils.isolate_apps의 데코레이터를 제공합니다. 다음과 같이 사용됩니다.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.utils</span> <span class=\"kn\">import</span> isolate_apps\n\n<span class=\"k\">class</span> <span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</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=\"nc\">TestModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"admonition-setting-app-label admonition\" role=\"note\">\n<p class=\"admonition-title\">‘’app_label’’을 설정합니다.</p>\n<p>명시적 <a class=\"reference internal\" href=\"/ko/4.0/ref/models/options/#django.db.models.Options.app_label\" title=\"django.db.models.Options.app_label\"><code class=\"xref py py-attr docutils literal notranslate\">app_label</code></a> 이 없는 테스트 방법에 정의된 모델에는 테스트 클래스가 위치한 앱의 레이블이 자동으로 할당됩니다.</p>\n<p><a class=\"reference internal\" href=\"#django.test.utils.isolate_apps\" title=\"django.test.utils.isolate_apps\"><code class=\"xref py py-func docutils literal notranslate\">isolate_apps()</code></a> 인스턴스의 컨텍스트에 정의된 모델이 올바르게 설치되었는지 확인하려면 대상 <code class=\"docutils literal notranslate\">app_label</code>  집합을 인수로 전달해야 합니다.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">tests/app_label/tests.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.utils</span> <span class=\"kn\">import</span> isolate_apps\n\n<span class=\"k\">class</span> <span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;other_app_label&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># This model automatically receives app_label=&#39;app_label&#39;</span>\n        <span class=\"k\">class</span> <span class=\"nc\">TestModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n\n        <span class=\"k\">class</span> <span class=\"nc\">OtherAppModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n                app_label <span class=\"o\">=</span> <span class=\"s1\">&#39;other_app_label&#39;</span>\n        <span class=\"o\">...</span>\n</code></pre></figure>\n</aside>\n<p>데코레이터는 클래스에도 적용할 수 있습니다.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.utils</span> <span class=\"kn\">import</span> isolate_apps\n\n<span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</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=\"nc\">TestModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>모델 등록을 분리하는 데 사용되는 임시  <code class=\"docutils literal notranslate\">Apps</code> 인스턴스는``attr_name`` 매개 변수를 사용하여 클래스 데코레이터로 사용될 때 속성으로 검색할 수 있습니다.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.utils</span> <span class=\"kn\">import</span> isolate_apps\n\n<span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> attr_name<span class=\"o\">=</span><span class=\"s1\">&#39;apps&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</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=\"nc\">TestModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertIs<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;TestModel&#39;</span><span class=\"p\">),</span> TestModel<span class=\"p\">)</span>\n</code></pre></div>\n<p>또는 “kwarg_name” 매개 변수를 사용하여 메서드 데코레이터로 사용할 때 테스트 방법에 대한 인수로 사용합니다.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.utils</span> <span class=\"kn\">import</span> isolate_apps\n\n<span class=\"k\">class</span> <span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> kwarg_name<span class=\"o\">=</span><span class=\"s1\">&#39;apps&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> apps<span class=\"p\">):</span>\n        <span class=\"k\">class</span> <span class=\"nc\">TestModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertIs<span class=\"p\">(</span>apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;TestModel&#39;</span><span class=\"p\">),</span> TestModel<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>","rootId":"unit-tests","toc":[{"title":"장치 테스트를 실행","anchor":"running-the-unit-tests","children":[{"title":"빠른시작","anchor":"quickstart","children":[]},{"title":"“tox”를 사용하여 테스트를 실행합니다.","anchor":"running-tests-using-tox","children":[{"title":"다른 Python 버전 및 데이터베이스 백엔드를 테스트합니다.","anchor":"testing-other-python-versions-and-database-backends","children":[]},{"title":"JavaScript 테스트를 실행합니다.","anchor":"running-the-javascript-tests","children":[]}]},{"title":"‘’장고-도커박스’’를 사용하여 테스트를 실행합니다.","anchor":"running-tests-using-django-docker-box","children":[]},{"title":"다른 ‘’설정’’ 모듈을 사용합니다.","anchor":"using-another-settings-module","children":[]},{"title":"일부 테스트만 실행합니다.","anchor":"running-only-some-of-the-tests","children":[]},{"title":"Selenium 테스트를 실행합니다.","anchor":"running-the-selenium-tests","children":[]},{"title":"모든 테스트를 실행합니다.","anchor":"running-all-the-tests","children":[]},{"title":"코드 적용 범위","anchor":"code-coverage","children":[]}]},{"title":"기여 어플리케이션","anchor":"contrib-apps","children":[]},{"title":"문제해결","anchor":"troubleshooting","children":[{"title":"테스트 제품군이 ‘’main’’ 분기에 중단되거나 오류가 표시됩니다.","anchor":"test-suite-hangs-or-shows-failures-on-main-branch","children":[]},{"title":"‘’UnicodeError’’로 많은 테스트가 실패합니다.","anchor":"many-test-failures-with-unicodeencodeerror","children":[]},{"title":"조합상으로만 실패하는 테스트입니다.","anchor":"tests-that-only-fail-in-combination","children":[]},{"title":"테스트 중에 실행되는 SQL 쿼리를 봅니다.","anchor":"seeing-the-sql-queries-run-during-a-test","children":[]},{"title":"테스트 실패의 전체 추적 결과를 봅니다.","anchor":"seeing-the-full-traceback-of-a-test-failure","children":[]}]},{"title":"쓰기 테스트에 대한 팁입니다.","anchor":"tips-for-writing-tests","children":[{"title":"모델 등록을 격리합니다.","anchor":"isolating-model-registration","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Django internals","url":"/ko/4.0/internals/"},{"docname":"internals/contributing/index","title":"장고에 기여하기","url":"/ko/4.0/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"코드작성","url":"/ko/4.0/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/coding-style","title":"코딩 스타일","url":"/ko/4.0/internals/contributing/writing-code/coding-style/"},"next":{"docname":"internals/contributing/writing-code/submitting-patches","title":"패치를 제출하고 있는 중","url":"/ko/4.0/internals/contributing/writing-code/submitting-patches/"},"formats":{"html":"/ko/4.0/internals/contributing/writing-code/unit-tests/","markdown":"/ko/4.0/internals/contributing/writing-code/unit-tests.md","json":"/ko/4.0/internals/contributing/writing-code/unit-tests.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/internals/contributing/writing-code/unit-tests.txt","official":"https://docs.djangoproject.com/ko/4.0/internals/contributing/writing-code/unit-tests/","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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}