지난번 Side effect를 방지하는 테스트 코드 작성법에서 언급했던 내용이 Django 3.2 버전 업그레이드를 통해 변경된 것이 있어 포스팅을 추가적으로 작성하게 되었습니다.
지난 포스팅
https://leffept.tistory.com/415
SetUpTestData 의 격리 지원
기존에는 SetUpTestData에 선언한 클래스 프로퍼티의 경우 테스트 메소드간의 격리를 지원하지 않았습니다. 그렇기 때문에 저번 포스티에서 클래스 프로퍼티로 선언한 것들의 값을 변경할 경우 다른 테스트 메소드에 영향을 줄 수 있다고 설명하였습니다.
하지만, 3.2 버전 이후부터 SetUpTestData에 선언한 클래스 프로퍼티들이 테스트 메소드마다 격리를 지원하도록 변경되었습니다.
따라서, 각 테스트 간에 영향을 주지 않게 되었습니다.
Changed in Django 3.2:
Objects assigned to class attributes in setUpTestData() must support creating deep copies with copy.deepcopy() in order to isolate them from alterations performed by each test methods. In previous versions of Django these objects were reused and changes made to them were persisted between test methods.
https://docs.djangoproject.com/en/3.2/topics/testing/tools/#django.test.TestCase.setUpTestData
해당 기능이 deepcopy를 통해 구현되었으므로, SetUpTestData 내의 클래스 프로퍼티들은 무조건 deepcopy를 지원하는 것만 선언할 수 있게 되었습니다.
이 기능을 통해 테스트 작성시에 신경쓸 포인트가 줄어, 생산성이 향상된 것 같습니다. 물론 테스트 메소드마다 격리를 진행함으로써 속도에 저하를 일으킬 수 는 있다고 추측하나, 실제로 체감된 것은 없기에 문제는 되지 않을 것입니다.
읽어주셔서 감사합니다 :)
728x90
'SW개발 > Django' 카테고리의 다른 글
[Django]cached_property 란? (0) | 2023.01.15 |
---|---|
[Django]TIME_ZONE, USE_TZ 설정 (feat. 글로벌 서비스) (2) | 2022.11.15 |
[Django]get_or_create() 란? (0) | 2022.08.01 |
[Django]DateField의 auto_now_add 옵션, 정확히 알아보기 (0) | 2022.07.31 |
[Django]Side effect 를 방지하는 테스트 코드 작성법 (0) | 2022.03.17 |