Django 응용 프로그램에는 Amazon S3에 파일을 업로드하는 코드 섹션이 있으며, unittests 중에이 섹션을 건너 뛰고 싶습니다. Unittest는 DEBUG=False
으로 실행되므로 settings.DEBUG == True
을 테스트하여이 섹션을 건너 뛰지 못합니다. 어떤 아이디어?Django에서 unittesting 할 때 코드 섹션을 건너 뛰려면 어떻게해야합니까?
답변
단위 테스트에서 코드를 "건너 뛰고"싶지는 않습니다. 그렇게하면 해당 영역에 대한 적용 범위를 얻을 수 없습니다. 외부 시스템에 모의 인터페이스를 제공하는 것이 훨씬 낫습니다. 따라서 나머지 코드는 예상대로 작동 할 수 있습니다. 을 사용할 수없는 외부 리소스를 처리 할 때 특히 중요합니다.은 네트워크 문제, 서비스 중단 또는 구성 오류가있을 때 S3이 될 수 있기 때문에 중요합니다.
로컬 파일 저장소 대신 테스트를 구성하는 대신 프로덕션 환경에서 Django S3 storage backend을 사용할 수도 있습니다.
업로드를 수행하는 모듈을 해킹하고 해당 모듈의 업로드 기능을 다른 기능으로 바꿀 수 있습니다. 이런 식으로 뭔가 :
foo.py :
def bar():
return 42
biz.py : 다시
import foo
print foo.bar() # prints 42
foo.bar = lambda: 37
print foo.bar() # prints 37
, 그것은 해킹, 그러나 이것은 유일한 곳이면 어디 필요 해요 그러한 기능이 당신을 위해 일할 수도 있습니다.
테스트를 위해 함수를 건너 뛰지 마십시오.
실물과 같이 실행하고 싶지 않은 것에 대한 모의 구현을 제공합니다.
먼저, S3 업 로더를 애플리케이션에 필요한 API가있는 별도의 클래스로 만들어 테스트하도록 설계했습니다.
그런 다음 동일한 API를 사용하여이 클래스의 모의 버전을 작성합니다. 그것이 한 것은 기록 된 것입니다.
마지막으로 실제 S3 업 로더 대신 모의 개체를 장치 테스트에 연결해야합니다.
Django 응용 프로그램은 단위 테스트에서 변경 내용을 "주입"한 것 외에는 변경해서는 안됩니다. 업로드
import the_uploader
import mock_uploader
from django.conf import settings
uploadClass = eval(settings.S3_UPLOAD_CLASS_NAME)
uploader= uploadClass(...)
을 수행
귀하의 views.py 지금, 당신은 두 settings.py
파일을 제공합니다. 기본 settings.py
에는 적절한 업 로더 클래스 이름이 있습니다.
테스트를 위해 test_settings.py
이 있습니다.
import settings.py
S3_UPLOAD_CLASS_NAME = "mock_uploader.mock_upload_class"
이렇게하면 실제로 모든 것을 테스트 할 수 있습니다.
이 경우, 그것은 책임의 상당히 자연 분리를 만든다. 그러나 주 코드의 구조가 단 하나의 가능한 구현을 가진 인터페이스에 의해 어지럽 혀진 코드를 보았습니다. 단위 테스트를 행복하게 만드는 것을 제외하고는 아무런 목적도 없었습니다. – Thomas
@ 토마스 : 파이썬에서? 또는 Java/C#에서 추가 선언적 항목이 필요한 곳은 어디입니까? –
- 1. MSBuild/MSDeploy를 배포 할 때 특정 파일을 건너 뛰려면 어떻게해야합니까?
- 2. VS2005 : C# 코드를 실행하면 코드 섹션을 건너 뛸 수 있습니까?
- 3. Ruby로 텍스트 파일을 구문 분석 할 때 특정 열을 건너 뛰려면 어떻게해야합니까?
- 4. SQL에서 값이 비어 있으면 INSERT에서 열 항목을 건너 뛰려면 어떻게해야합니까?
- 5. 유효성 검사를 건너 뛰려면 JSF immediate = true
- 6. 이 루프에서 빈 결과 또는 오류를 건너 뛰려면 어떻게해야합니까? 코드 반환이 오류를 제공 empty..then하고 ... 그래서 나는이를 건너 뛰고 계속하는 방법을 중지 할 때
- 7. 매핑 할 때 반복적 인 코드 작성을 회피하려면 어떻게해야합니까?
- 8. 코드 포맷에서 코드 섹션을 제외하십시오
- 9. 최대 최적화 상태에서도 완료되지 않은 코드 섹션을 강제로 실행하려면 어떻게해야합니까?
- 10. LOAD DATA LOCAL, 첫 번째 줄을 건너 뛰려면 어떻게합니까?
- 11. JSLint - 코드 섹션을 무시하십시오.
- 12. UnitTesting 할 때 Ninject를 사용하여 Moq로 객체 모의 처리
- 13. Javascript unittesting frameworks
- 14. 코드 섹션을 다른 스레드에 넣으시겠습니까?
- 15. .Net 건너 뛰기 코드
- 16. 콘텐츠에 맞게 섹션을 확장하려면 어떻게해야합니까?
- 17. UnitTesting for Silverlight 4
- 18. 검색 할 때 .xsd 건너 뛰기
- 19. 사이트에서 생성 코드 섹션을 만드는 방법은 무엇입니까?
- 20. Javascript Unittesting Jasmine/Unit Testing - 개인 기능이 호출되었는지 테스트하려면 어떻게해야합니까?
- 21. 루핑 코드/건너 뛰기 행
- 22. UITableView에 행이없는 섹션을 표시하지 않으려면 어떻게해야합니까?
- 23. python pdb - 루프 건너 뛰기
- 24. 코드 라인을 건너 뛰는 프로그램
- 25. 웹 사이트 로그인 화면을 건너 뛰려면 사용자 정의 "POST"요청을 하시겠습니까?
- 26. 배경색이 다른 코드 섹션을 표시 하시겠습니까?
- 27. Django에서 raw_id_fields를 사용할 때 강제 생성 객체
- 28. 여러 스레드에서 실행되는 코드 섹션을 식별하는 방법
- 29. 섹션을 변경하는 셀을 업데이트 할 때 UITableView 충돌이 발생합니다.
- 30. 디버깅 - 중단 점이있는 코드 건너 뛰기
rcoder의 답을 가장 좋은 해결책으로 받아 들였지만이 상황에서 "올바른"방법을 사용하는 것이 중요하지 않으므로 rcoder의 대답이이 솔루션을 사용하여 끝났습니다. –
걱정하지 마라, 그의 대답은 나의 것보다 낫다 :) – Thomas