2017-10-04 9 views
0

Django 테스트 러너를 사용하여 단위 테스트를 실행하고 있습니다. 이러한 테스트 중 일부는 로컬 시스템에 TONS 개의 파일을 생성하는 팩토리를 사용합니다. 그들은 모두 감지 할 수있는 이름을 가지며 쉽게 제거 할 수 있습니다. 나는 우리가 테스트하고 있음을 감지 한 경우 Django/unittest가 테스트 러너 끝에서 실행 명령

  • 파일을 삭제하는 내 사용자 지정 이미지 모델의 코드를 변경 실행 파일 삭제 cron 작업을 계속하거나

    1. 하는 것을 피하기 위해 노력하고있어

      . 대신, 나는 테스트가 생성 한 모든 파일을 정리하기 위해 테스트를 끝낼 때 한 번만 명령을 실행하고 싶습니다.

    의도 한 규칙과 일치하는 파일을 삭제하는 작은 관리 명령을 작성했습니다. 테스트 러너가 tearDown 또는 특정 테스트의 tearDownClass 메소드가 아닌 전체 테스트 스위트 완료시 call_command을 실행하는 방법이 있습니까?

  • 답변

    0

    그래서 우리는 settings.py를 위해 다음 줄을 추가하여 사용자 정의 테스트 러너를 작성되었습니다하고 결국 무엇을 기존 주노 테스트 주자로부터 상속받은 테스트 러너의

    import os                     
    import shutil 
    
    from django.conf import settings 
    from junorunner.testrunner import TestSuiteRunner 
    
    
    class MyTestRunner(TestSuiteRunner): 
    
        def teardown_test_environment(self, *args, **kwargs): 
         # Remove test-created media files 
         if all([ 
          os.path.isdir(settings.MEDIA_ROOT), 
          'test' in settings.MEDIA_ROOT, 
         ]): 
          shutil.rmtree(settings.MEDIA_ROOT) 
         super(MyTestRunner, self).teardown_test_environment(*args, **kwargs) 
    

    이 방법은 한 번만 시험 방법의 분해에라고하고,이 말에 한 번 호출되는 것을 보장하기 위해 좋은 장소가 될 것 같다된다.

    0

    models.py와 같은 폴더에 services.py 파일을 만들면 정리 코드를 넣은 다음 DRY 상태로 유지하면서 관리 명령과 test tearDown에서 호출 할 수 있습니다.

    0

    당신은 아마 당신의 테스트 케이스가 장고의의 TestCase 클래스에서 상속하는 경우 장고 테스트 러너 주문 테스트가

    (https://docs.djangoproject.com/en/1.11/topics/testing/overview/#order-in-which-tests-are-executed 참조) 방식을 악용 할 수 있습니다, 당신은 unittest.TestCase에서 직접 상속 더미 정리 테스트 케이스를 만들 수 있습니다 . 테스트 러너가 마지막으로 테스트를 실행하면 거기에서 정리를 수행 할 수 있습니다.

    그러나 이것은 장고 개발자가 테스트 주문을 변경하기로 결정한 경우 중단됩니다.

    TEST_RUNNER = 'myapp.test_runner.MyTestRunner' 
    

    그런 다음 테스트 러너에, 우리는 "teardown_test_environment"방법 내에서 이미지를 삭제 :