Introduction unittest.mock 모듈의 patch() 데코레이터를 이용하면 특정 모듈의 함수나 클래스를 가짜(mock)객체, 좀 더 엄밀히 말하면, MagicMock 인스턴스로 대체할 수 있다. 이 과정을 흔히 mocking 또는 patching이라고 하는데, 단위 테스트를 작성할 떄 외부 서비스에 의존하지 않고 독립적으로 실행이 가능한 단위 테스트를 작성하기 위해서 사용되는 테스팅 기법이다.
patch 데코레이터 unittest.mock 모듈의 patch() 데코레이터는 특정 범위 내에서만 mocking이 가능하도록 해준다. 일반적으로 다음과 같이 patching이 필요한 단위 테스트 메서드에 patch() 데코레이터를 선언해줌으로서 해당 메서드 내에서만 patching이 이뤄지게 한다.
Introduction unittest 모듈은 Java의 JUnit, JS의 Jest 같은 단위 테스트 프레임워크이다. 다만 다른 언어와 달리 기본적으로 내장되어 있기에 파이썬만 설치된다면 바로 모듈을 불러와서 사용할 수 있다.
TestCase 클래스 unittest 모듈의 TestCase 클래스는 단위 테스트에 필요한 다양한 유틸리티 메소드를 제공한다. 따라서 새로운 테스트를 작성할 때는 TestCase 클래스를 상속하는 클래스를 먼저 작성해야 한다. 해당 클래스 안에 테스트를 수행하는 로직을 메서드로 추가해주면 된다.
예를 들어 1과 2을 더해서, 3을 return 하는 테스트는 다음과 같이 작성할 수 있다.
Introduction 단위 테스트를 작성하다보면 데이터베이스 또는 외부 API에 의존하는 코드를 테스트해야 할 일이 생긴다. 운영 환경 대비 제약이 많은 테스트 환경에서는 실제 데이터베이스와 연동하거나 실제 외부 API를 호출하기가 불가능한 경우가 많다. 가령 가능하더라도, 이렇게 외부 서비스에 의존하는 테스는 해당 서비스에 문제가 생길 경우 실패할 수 있으며 실행 속도도 당연히 느리다.
따라서 단위 테스트를 작성할 때 외부에 의존하는 부분을 임의의 가짜로 대체하는 기법이 자주 사용되는데 이를 Mocking이라고 한다. 즉, Mocking은 외부 서비스에 의존하지 않고 독립적으로 실행이 가능한 단위 테스트를 작성하기 위해서 사용되는 테스팅 기법이다.
Introduction 파이썬에서 데이터를 저장하기 위해 여러가지 방법을 사용한다. List, Tuple, Dictionary, Namedtuple, Set, Frozen set과 같은 내장 자료구조는 사용하기 편리하다는 장점이 있다.
반면에 클래스를 이용해서 데이터를 담아두면 캡슐화를 통해 type 안정성을 높일 수 있다.
파이썬 3.7에서 dataclasses라는 매우 매력적인 모듈이 표준 라이브러리에 추가되었다. 이에 대한 정리글이다.
기존 방식의 클래스를 먼저 dataclasses 모듈에 대해서 정리하기 전에 기존에 사용하던 데이터 저장용 클래스를 알아본다.
1 2 3 4 5 6 7 8 from datetime import date class User(): def __init__(self, id:int, name: str, birth: date, role: bool = False) -> None: self.
Install 1 > brew install pyenv Environment setting /.zshrc setup
1 2 3 4 5 6 7 8 9 # vim ~/.zshrc # ... export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" eval "$(pyenv init -)" alias brew='env PATH="${PATH//$(pyenv root)\/shims:/}" brew'
Introduction Poetry는 Python 개발 시 패키지의 의존성을 관리하는 라이브러리이며, 자바의 Maven이나 Gradle과 비슷한 Tool이라고 볼 수 있다. 또한 Virtualenv와 같이 가상 환경 설정을 지원해, 보다 포괄적인 의미의 기능도 있으며 build / publish 같은 배포까지도 가능한 범용적인 Tool로도 사용할 수 있다. pip과는 다르게 .toml, .lock 파일을 생성해 의존성을 관리한다.
.toml: 프로젝트 의존성읠 메타 데이터 저장
프로젝트와 의존성들 간의 충돌을 해결해준다. .lock: 설치된 패키지들의 version, hash 저장
해당 파일을 사용해 프로젝트 의존성을 다른 환경에서도 동일하게 유지할 수 있도록 해준다.