- python-django 응용 프로그램이 있습니다.
- 단위 테스트 프레임 워크를 사용하고 있습니다.
- 테스트는 모듈 디렉토리의 "tests.py"파일에 정렬됩니다.
- 다음을 통해 테스트를 실행하고 있습니다.
./manage.py test app
지금..
tests.py
파일이 오히려 큰 / 복잡한지고 / 지저분한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 문서를 참조하십시오.
test*.py
이라는 폴더에있는 파일을 tests
이 가능하지만 실행해야합니다 - 깨끗한 폴더를 유지하기 위해 ./manage.py test app.tests
모든 관련 수입 수준 (최대 갈 필요가 from .models
된다 from ..models
).
이 접근 방식은 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
python manage.py test myapp
가 실제로이 답변이 잘 작동한다는 것을 의미 한다면. (방금 시도)
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
__init__.py
sys.modules[packagename]
. 빠른 해결 방법은 del
위의 이후에 문제를 일으키는 모든 것입니다. (또는 당신은 폴더 이름을 바꿀 수))
python manage.py test appName
)를 실행할 때 두 번째 코드 비트에서 __path__
사용할 수 없다는 오류가 발생하는 오류가 발생했습니다 . 두 번째 스 니펫을 if '__path__' in locals():
수표 로 래핑하여 피했습니다 . 답변 해주셔서 감사합니다!
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
나는 생각한다 ./manage.py test
단순히 모든 테스트 트릭을 실행 (django> = 1.7).
귀하의 경우 조직 검사 에 관한 그룹화 와 체리 피킹 그리고 당신의 팬 nose
을 사용 코 장고 :
python manage.py test another.test:TestCase.test_method
코를 안다면 모든 파일에 대해 훨씬 더 멋지게 "와일드 카드"하는 방법을 알고있을 것입니다.
추신
더 나은 방법입니다. 도움이되기를 바랍니다. 대답은 여기에서 빌 렸습니다. 앱에 테스트 디렉터리가있을 때 Django에서 특정 테스트 케이스 실행