FastAPI 28

PyTest Fixture

def test_get_todos(mocker): # order = ASC # mocker를 쓰며 실제로 이 함수를 동작시키는 것이 아니라 이 함수가 동작한 것처럼 속이겠다 라는 의미 # 그래서 DB에 들리지 않고 그냥 밑의 return_value 값으로 반환이 돼어 테스트하게 된다. mocker.patch("main.get_todos", return_value=[ ToDo(id=1, contents="FastAPI Section 0", is_done=True), ToDo(id=2, contents="FastAPI Section 1", is_done=False), ]) response = client.get("/todos") assert re..

PyTest란?

테스트 코드 작성을 위한 Python 라이브러리vs. Unittest간결한 문법assert 문함수 단위 테스트 지원fixture 지원테스트 데이터 관리라이브러리 설치pip install pytest테스트를 하는 라이브러리pip install httpxFastAPI에서 테스트 client라는 기능을 사용하기 위해 내부적으로 사용하는 라이브러리Python Package 만들기이전까지는 기존 directory를 추가했었는데 지금은 반드시 python package를 추가를 해야된다.둘의 차이로는 python package는 기본적으로 __init__.py가 생성된다.새로운 python package 폴더 아래에 반드시 있어야 정상적으로 탐색할 수 있게 된다.이 python package는 python이 경로를..

ORM 적용 - DELETE API

# repository.pyfrom sqlalchemy import select, deletedef delete_todo(session: Session, todo_id: int) -> None: session.execute(delete(ToDo).where(ToDo.id == todo_id)) session.commit()session.execute() 완전 이해하기먼저 전체 맥락 이해하기지금까지 배운 SQLAlchemy 조회 방법들SQLAlchemy 실행 메서드 비교 메서드 용도 반환값 session.scalars()조회 (여러 개)객체 목록session.scalar()조회 (한 개)객체 하나session.execute()뭐든 다 실행Result 객체session.execute() 는 ..

ORM 적용 - PATCH API

# orm.py def done(self) -> "ToDo": self.is_done = True return self def undone(self) -> "ToDo": self.is_done = False return self인스턴스 메소드로 정의이렇게 인스턴스 메소드를 정의해서 데이터를 업데이트 관리하는 이유는 유지보수가 훨씬 편하기 때문이다.예를 들어 만약 is_done을 True로 업데이트할 때 이메일을 발송한다고 하면 여기에 sendEmail 같은 식으로 코드를 구현하게 되면은 이 updateDone을 호출할 때마다 이 코드가 자연적으로 호출이 돼서 좀 더 코드 반복 없이 작업을 할 수 있게 된다.근데 만약 isDone을 true로 하..