Django의 단위 테스트 장치 (manage.py test)를 사용하고 있는데, 이것은 오류를 던지고 코드가 경고를 생성 할 때 정지합니다. 이 표준 코드는 표준 Python unittest 모듈에서 테스트 할 때 경고를 생성하지만 코드를 통해 코드 실행을 계속합니다.Django의 단위 테스트에서 경고가 예외로 발생합니까?
약간의 연구에 따르면 파이썬이 경고에 예외를 발생 시키도록 설정할 수 있습니다. 이는 테스트 프레임 워크에서 오류가 발생했다고 생각할 수 있다고 생각합니다. 유감스럽게도, 테스트에 대한 장고 문서는 "오류"의 정의 또는 경고 처리를 수정하는 방법에 대해 약간의 빛을 보입니다.
So : Django 유닛 테스트 프레임 워크가 기본적으로 경고를 발생시키는 설정입니까? 장고에이 동작을 변경하는 기능이 있습니까? 그렇지 않다면 장고가 오류를 출력하지만 코드 실행을 계속할 수있는 방법에 대한 제안은 누구나 가지고 있습니까? 아니면 문제를 완전히 잘못 진단 했습니까?
업데이트 : MySQLdb를 호출 할 때 경고가 표시되면 테스트 코드가 중단됩니다. 이러한 호출은 Python unittest 프레임 워크에서 테스트 할 때 동일한 경고를 던지지만 중단하지는 않는 모듈에 의해 수행됩니다. 나는 코드의 상황을 복제 할 수있는 효율적인 방법에 대해 생각할 것이다.
답변 :
/usr/...django/.../mysql/base.py :
조금 더 연구는이 문제가 장고의 MySQL의 백엔드와 관련된 계시
if settings.DEBUG:
...
filterwarnings("error", category=Database.Warning)
DEBUG = False로 settings.py를 변경하면 코드가 경고를 throw하지만 멈추지 않습니다.
내 데이터베이스 호출이 내 자신의 백엔드에 의해 생성되기 때문에 이전에 장고에서이 문제가 발생하지 않았습니다. 장고 백엔드를 호출하지 않았기 때문에 나는 경고 처리를 재설정하지 않았으며 경고 메시지에도 불구하고 코드는 계속되었다. Django 테스트 프레임 워크는 장고 백엔드를 확실히 호출합니다. 데이터베이스를 사용하여 모든 일을 처리합니다. 코드가 호출되기 전에 호출이 경고 처리를 재설정합니다.
이 동작을 트리거 할 수 없습니다. 의도적으로 경고를 발행하는 코드를 추가하면 경고 메시지가 인쇄되지만 테스트는 계속 진행됩니다. 당신이하고있는 일과 당신이보고있는 결과에 대한 좀 더 많은 정보가 도움이 될 것입니다. –
문서에서 Django 테스트는 디버그 모드를 실행하지 않습니다. http://docs.djangoproject.com/en/dev/topics/testing/#other-test-conditions, 그래서 당신이 참조한 코드 경고/오류가 발생합니다. ./manage.py 테스트 프로세스의 일부로 '테이블이 존재하지 않습니다'SQL을 어떻게 트리거하고 있습니까? – michaeljoseph