test 코드 질문
강의 너무 잘보고 있습니다
test 코드 실습 중에 생긴 문제인데요
def test_update_todo(client, mocker):
mocker.patch.object(ToDoRepository, "get_todo_by_todo_id", return_value=ToDo(id=1, contents="todo", is_done=True))
mocker.patch.object(ToDoRepository, "update_todo", return_value=ToDo(id=1, contents="todo", is_done=True))
body = {
"is_done": False
}
response = client.patch("/todos/1", json=body)
assert response.status_code == 200
assert response.json() == {"id": 1, "contents": "todo", "is_done": True}
# 404
mocker.patch.object(ToDoRepository, "get_todo_by_todo_id", return_value=None)
response = client.patch("/todos/1", json=body)
assert response.status_code == 404
assert response.json() == {"detail": "ToDo Not Found"}이런식으로 test 코드를 작성한 다음에 리팩토링 과정에서 잘못선택되서 todo_id가 빠진 상태로 코드를 올렸습니다
@router.patch("/{todo_id}", status_code=200)
def update_todo_handler(
todo_id: int,
is_done: bool = Body(..., embed=True),
todo_repo: ToDoRepository = Depends()):
todo: ToDo | None = todo_repo.get_todo_by_todo_id() # 이 부분 todo_id를 빼버림
if todo:
todo.done() if is_done else todo.undone()
todo: ToDo = todo_repo.update_todo(todo)
return ToDoSchema.from_orm(todo)
else:
raise HTTPException(status_code=404, detail="ToDo Not Found")이게 제가 잘못 작성한 코드고 todo.get_todo_by_todo_id 함수에 parameter를 안넣고 pytest를 실행해도 mocker.patch로 지정된 값이 넘어오게 되니까 에러가 나지 않더라구요
실행하면 당연히 500 internal error가 발생하는데 혹시 이런 경우까지 방지하도록 test 코드를 바꾼다면 어떻게 바꿔야할까요?
답변 1
1
안녕하세요. 그런 경우에는 mocker의 assert_called_once_with를 사용하시면 해당 메소드가 올바른 인자로 호출되었는지 확인할 수 있습니다.
# 기존 사용하시던 부분에 mock을 변수로 할당
mock_get_todo_by_todo_id = mocker.patch.object(ToDoRepository, "get_todo_by_todo_id", return_value=None)
# client.patch() 호출 이후
mock_get_todo_by_todo_id.assert_called_once_with(todo_id=todo_id)
FasAPI Swagger UI에서 단일조회 todo_id 를 사용했는데, 입력값에 1을 넣으니 오류가 뜹니다 ㅠ
0
87
2
DB 질문
0
81
2
Post API 강의 질문
0
55
2
post 작성 오류
0
107
3
uvicorn 종료 문제
0
436
2
왜 return타입이 ToDo라는 스트링인가요?
0
130
2
ORM 연관관계
0
109
2
Oracle DB 연결과 관련해 질문이 있습니다..
0
153
2
섹션 2, 3의 PATCH API의 차이점
0
132
1
ORM 테이블 생성
0
119
1
테스트 코드 오류
0
177
1
orm relationship 정의 중 해당 에러 발생 시 어떻게 고쳐야 하는걸까요
0
214
3
FastAPI 폴더 구조에 대해 질문이 있습니다.
0
412
2
질문 있습니다.
0
161
2
ORM 개념
0
133
1
mysql root 비밀번호 변경관련
0
296
2
[질문] patch API
0
151
3
디자인 패턴
0
128
1
main.py 리로드문제
0
235
2
인터프리터 오류
0
286
4
로그 저장에 대한 질문입니다.
0
100
1
Internal Server Error
0
240
2
PATCH API - 수정
0
199
2
파이참 임포트 문제
0
263
1





