SW개발/Django

[Django]SetUpTestData의 격리 지원 (feat. Django > 3.2)

지난번 Side effect를 방지하는 테스트 코드 작성법에서 언급했던 내용이 Django 3.2 버전 업그레이드를 통해 변경된 것이 있어 포스팅을 추가적으로 작성하게 되었습니다.

 

지난 포스팅

https://leffept.tistory.com/415

 

[Django]Side effect 를 방지하는 테스트 코드 작성법

Side effect 를 방지하는 테스트 코드 작성 테스트 코드 작성의 중요성을 깨닫고 난 후부터 신경을 써서 테스트를 작성하고 있습니다. 오늘은 Django로 테스트를 작성하면서 Side effect가 발생했던 경

leffept.tistory.com

 

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

 

Testing tools | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

해당 기능이 deepcopy를 통해 구현되었으므로, SetUpTestData 내의 클래스 프로퍼티들은 무조건 deepcopy를 지원하는 것만 선언할 수 있게 되었습니다.

 

이 기능을 통해 테스트 작성시에 신경쓸 포인트가 줄어, 생산성이 향상된 것 같습니다. 물론 테스트 메소드마다 격리를 진행함으로써 속도에 저하를 일으킬 수 는 있다고 추측하나, 실제로 체감된 것은 없기에 문제는 되지 않을 것입니다.

 

읽어주셔서 감사합니다 :)

 

728x90