파이썬 테스트를 도와주는 Faker와 Factory Boy

임의의 값만 테스트하게 되는 문제

테스트 코드를 읽기 힘들게 만드는 이유 중 하나는 테스트용 임시 데이터를 생성하는 코드에서 임의의 값이 남발되기 때문입니다. 이런 식으로요.

이렇게 임의의 값을 사용하면, 해당 값에 대해서만 테스트 코드가 통과하는지도 모른다는 불안감이 생기기 마련인데요. Faker 라이브러리를 사용하여 이를 해결할 수 있습니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

무작위 값을 생성해주는 Faker 라이브러리

Faker 라이브러리는 실행 시점에 무작위 값을 생성합니다. 다음과 같이요.

이를 활용하여 Django에서 임시 인스턴스를 만든다면 다음과 같은 식이 될 겁니다.

특정 값이 사라짐으로써 의도를 더 드러낼 수 있고, 매번 다른 값으로 테스트를 실행할 수 있어서 코드도 좀더 안정적일 수 있습니다.

반복되는 테스트 코드 문제

만약 테스트 코드에서 블로그 글을 열 개 만들어야 한다면 어떤 일이 발생할까요? 다음과 같이 굉장히 반복되는 테스트 코드가 만들어집니다.

임시 데이터 생성용 라이브러리를 사용하면 이를 간결하게 줄일 수 있는데, 개인적으로는 Factory Boy가 여러 모로 마음에 들어 사용하고 있습니다.

Factory Boy로 Django 테스트 코드 간략화하기

먼저 임시 데이터 생성용 Factory를 선언합니다.

이제 중복되는 테스트 코드를 Factory Boy로 다시 작성하면 다음과 같이 줄일 수 있습니다.

연관 모델 함께 생성하기 SubFactory

새 Blog를 열 개 만들고, 각 Blog에 Post를 하나씩 만들고 싶다면 SubFactory를 지정하면 됩니다.

이렇게 하면 Post를 생성하기 전 알아서 Blog를 생성해줍니다.

ChoiceField에 대응하는 FuzzyChoice

Post에 카테고리를 지정한다고 가정해보죠. general과 it, book 카테고리 중 하나를 선택할 수 있도록 ChoiceField로 지정해 두었을 겁니다. 이때 테스트용 Post는 세 카테고리 중 하나를 무작위로 골라서 넣어주면 좋겠죠.

순차적인 값 Sequence

어떤 이유로 Post에 일련 번호를 지정해야 한다면 Sequence를 사용할 수 있습니다.

이 외에도 특정 메서드를 실행한 값을 넣어줄 수 있는 LazyFunction이나 인스턴스 스스로의 값을 참조하여 또다른 값을 생성해야 할 때 사용하는 LazyAttribute 등 다양한 기능이 존재합니다. 더 자세한 내용은 Factory Boy 문서를 참고하시기 바랍니다.

도움이 되셨나요?
RSS 리더 피들리에서 최신 글을 구독할 수 있습니다.
트위터, 페이스북으로 44BITS의 새소식을 전해드립니다.
✔ 44BITS의 다른 활동도 확인해보세요. 다양한 채널에서 만나볼 수 있습니다.
✔ 따뜻한 댓글 하나와 피드백은 큰 힘이 됩니다.

AWS 리인벤트(re:Invent) 주요 키노트 세션 소개

🗒 기사, 2018-12-05 - 2018년 11월에는 AWS re:Invent 2018이 열렸습니다. 일주일간 진행되는 리인벤트에서는 다양한 서비스와 기능들이 쏟아져나오는데, 그만큼 다양한 키노트가 준비되어있습니다. 키노트 구성을 이해하면 리인벤트를 좀 더 알차게 즐길 수 있습니다.

xclip으로 터미널에서 클립보드 활용하기

🗒 기사, 2014-07-29 - GUI 환경과 CLI 환경 사이에서 정보를 공유하는 것은 생각보다 까다로운 일입니다. 리눅스의 X클립(XClip은)이 두 환경의 클립보드를 연동해주는 애플리케이션입니다. 이 글에서는 X클립을 사용해 GUI 클립보드의 내용을 터미널에서 붙여넣기 하는 방법과 터미널의 문자열을 GUI 클립보드로 복사하는 방법을 소개합니다.

만들면서 배우는 아마존 VPC(Amazon VPC) 입문: AWS 네트워크의 기초

🗒 기사, 2019-05-14 - 아마존 버추얼 프라이빗 클라우드(Amazon VPC)는 아마존 웹 서비스(Amazon Web Service)의 가장 기본이 되는 네트워크 서비스이자 리소스입니다. AWS에서 제공하는 대부분의 리소스들은 아마존 VPC를 기반으로 실행됩니다. 따라서 VPC를 이해하고 있어야 AWS 서비스를 십분 활용할 수 있습니다. 이 글에서는 기본 VPC와 같은 구성을 직접 만들어보면서 VPC의 기본 개념과 리소스들을 소개합니다.