[django] 장고 단위 테스트를 여러 파일에 분산시키는 방법은 무엇입니까?
- python-django 응용 프로그램이 있습니다.
- 단위 테스트 프레임 워크를 사용하고 있습니다.
- 테스트는 모듈 디렉토리의 “tests.py”파일에 정렬됩니다.
- 다음을 통해 테스트를 실행하고 있습니다.
./manage.py test app
지금..
tests.py
파일이 오히려 큰 / 복잡한지고 / 지저분한tests.py
작은 테스트 모음 으로 나누고 싶습니다 …
어떻게?
답변
Django 1.6에서 동작이 변경되었으므로 더 이상 패키지를 만들 필요가 없습니다. 파일 이름 만 지정하면 test*.py
됩니다.
테스트를 실행할 때 테스트 유틸리티의 기본 동작은 이름이 test로 시작하는 파일에서 모든 테스트 케이스 (즉, unittest.TestCase의 하위 클래스)를 찾고 해당 테스트 케이스에서 테스트 스위트를 자동으로 빌드하는 것입니다. 그 스위트를 실행하십시오.
에서 장고 1.6 문서 ,
테스트 검색은 unittest 모듈의 기본 제공 테스트 검색을 기반으로합니다. 기본적으로 현재 작업 디렉토리 아래의 “test * .py”파일에서 테스트를 검색합니다.
Django 1.5 문서의 이전 동작 :
테스트를 실행할 때 테스트 유틸리티의 기본 동작은 models.py 및 tests.py에서 모든 테스트 케이스 (즉, unittest.TestCase의 하위 클래스)를 찾고 해당 테스트 케이스에서 테스트 스위트를 자동으로 빌드하는 것입니다. 그 스위트를 실행하십시오.
모듈에 대한 테스트 스위트를 정의하는 두 번째 방법이 있습니다. models.py 또는 tests.py에 suite ()라는 함수를 정의하면 Django 테스트 실행기는 해당 함수를 사용하여 해당 모듈에 대한 테스트 스위트를 구성합니다. 이는 단위 테스트에 대해 제안 된 구성을 따릅니다. 복잡한 테스트 스위트를 구성하는 방법에 대한 자세한 내용은 Python 문서를 참조하십시오.
답변
이 접근 방식은 Django 1.6에서 더 이상 유효하지 않습니다 . 이 게시물을 참조하십시오 .
내부에 tests
폴더를 만들 수 있습니다 ___init___.py
(패키지가되도록). 그런 다음 분할 테스트 .py 파일을 거기에 추가하고 ___init___.py
.
즉 : test.py
파일처럼 보이고 작동하는 모듈로 파일을 대체 합니다.
tests
해당 앱 아래 에 디렉토리 생성
앱 app \ models.py app \ views.py 앱 \ 테스트 app \ tests \ __ init__.py app \ tests \ bananas.py app \ tests \ apples.py
하위 모듈을 app\tests\__init__.py
다음 으로 가져옵니다 .
from bananas import *
from apples import *
이제 ./manage.py를 단일 파일에있는 것처럼 사용할 수 있습니다.
./manage.py test app.some_test_in_bananas
답변
Tomasz가 말한 답이 맞습니다. 그러나 가져 오기가 __init__.py
파일 구조와 일치 하는지 확인하는 것은 지루할 수 있습니다 .
폴더의 모든 테스트 를 자동으로 감지 하려면 다음 위치에 추가 할 수 있습니다 __init__.py
.
import unittest
def suite():
return unittest.TestLoader().discover("appname.tests", pattern="*.py")
이렇게하면 실행할 수 ./manage.py test appname
있지만 특정 테스트 실행을 처리하지는 않습니다. 이를 위해 다음 코드를 사용할 수 있습니다 __init__.py
.
import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(module_name).load_module(module_name)
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
exec ('%s = obj' % obj.__name__)
이제 모든 테스트를 다음을 통해 manage.py test app
또는 특정 테스트를 통해 실행할 수 있습니다.manage.py test app.TestApples
답변
디렉토리 구조를 다음과 같이 만드십시오.
myapp/
__init__.py
tests/
__init__.py
test_one.py
test_two.py
...
...
그리고 python manage.py test myapp
예상대로 작동합니다.
답변
http://docs.python.org/library/unittest.html#organizing-tests 는 파일을 모듈로 분할하는 방법에 대해 설명하며 바로 위에있는 섹션에 예제가 있습니다.
답변
init에서 아무것도 코딩 할 필요가 없습니다. 앱에 하위 디렉토리를 만드십시오. 유일한 요구 사항은 테스트라고 부르지 않는 것입니다 *
예를 들어
app/
app/__init_.py
app/serializers.py
app/testing/
app/testing/__init__.py
app/testing/tests_serializers.py
답변
Django 2.2를 사용하면 간단하고 상당히 좋은 해결책은 test
앱 내부 에 폴더 를 만드는 것입니다. 관련 test_...py
파일을 폴더에 추가 __init__.py
하기 만하면 test
됩니다.