pile·
백엔드·8퍼센트8퍼센트·

8퍼센트 Test case 작성 가이드

8퍼센트가 Python Django 코드의 테스트 케이스를 작성할 때 쓰는 팀 내부 가이드를 공개한 글이다. 네이밍 규칙부터 factory_boy 사용법, 객체 생성 위치에 따른 속도 차이, mock 과 시간 고정까지 실무에서 반복되는 결정들을 짧게 정리한다.

핵심 포인트
  • 클래스명은 TestCase 를 상속하면 끝에 TestCase 를 붙이고, 테스트 함수명은 test_ 뒤를 한글로 써서 주석을 대신한다.
  • fixture 대신 가급적 factory_boy 를 쓴다. 모델 객체 생성 시 signal 이 호출되는데 signal 테스트가 아니라면 mute_signals 로 끄면 된다.
  • 객체 생성 위치가 속도를 가른다. setUp 은 매 테스트마다 다시 만들지만 setUpTestData 는 한 번만 만든다.
  • 읽기 전용으로만 쓰는 객체는 setUpTestData 에서 만들고, 나머지는 테스트 함수 안에서 필요한 것만 만드는 편이 빠르다.
  • naive datetime 을 DateTimeField 에 넣을 때는 반드시 make_aware 로 time-zone-aware 객체로 바꾼 뒤에 할당한다.
상세 정리
  • 함수명 예시는 조건과 기대 동작을 한글로 이어 붙이는 식이다. 쿼리스트링이 없는 경우와 있는 경우처럼 분기를 이름에 담는다.
  • mute_signals 는 데커레이터와 컨텍스트 매니저 두 방식 모두로 쓸 수 있다.
  • fixture 는 정의한 모델 객체를 모든 테스트 시작 전에 만들어두는데, setUp 에서 factory 를 쓰면 그와 비슷하게 매번 생성돼 느려진다.
  • 메서드 모킹은 unittest.mock.patch 를 쓰고 보통 테스트 메서드의 데커레이터로 붙인다.
  • 한 클래스의 여러 메서드나 모든 메서드에서 같은 함수를 모킹해야 하면 start 와 stop 을 쓰는 편이 편하다.
  • 특정 시점 테스트가 필요하면 freezegun 으로 현재 시간을 고정한다.
  • 시간 고정도 가급적 데커레이터나 컨텍스트 매니저로 범위를 좁히는 것이 좋다.
  • start 와 stop 으로 테스트 케이스 전체에 적용할 때는 반드시 stop 을 호출해야 다른 테스트 케이스의 시간 값에 영향을 주지 않는다.
왜 읽나Django 테스트를 쓰긴 쓰는데 팀 안에서 방식이 제각각인 상황에서, 그대로 가져다 쓸 수 있는 규칙 묶음을 짧게 제시하는 가이드.
8퍼센트
8퍼센트 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2