인프런 커뮤니티 질문&답변

luke님의 프로필 이미지
luke

작성한 질문수

실전! FastAPI 입문

(실습) 회원가입 API 테스트

회원가입 test Api Assertion Error

해결된 질문

작성

·

218

·

수정됨

0

해결완료...

user: User = User.create(username=request.username, hashed_password=hashed_password)

저 부분에서 username 안하고, positional Arugment처럼
User.create(request.username)이런 식으로 코드를 썻네요.. 파이썬에서는 named Argument형식을 맞춰야 하나요?

 

test api user 코드 입니다.

def test_user_sign_up(client, mocker):
    hash_password = mocker.patch.object(
        UserService, "hash_password", return_value="hashed"
    )

    user_create = mocker.patch.object(
        User, "create", return_value=User(id=None, username="test", password="hashed")
    )

    mocker.patch.object(
        UserRepository,
        "save_user",
        return_value=User(id=1, username="test", password="hashed"),
    )

    body = {"username": "test", "password": "plain"}
    response = client.post("/users/sign-up", json=body)

    hash_password.assert_called_once_with(plain_password="plain")
    user_create.assert_called_once_with(username="test", hashed_password="hashed")

    assert response.status_code == 201
    assert response.json() == {"id": 1, "username": "test"}

 

 

깃 헙 나온 코드로도 해봤지만, 여전히

user_create.assert_called_once_with()

이 부분에서 에러가 납니다. 주석처리하면 잘 통과 되구요.


아래가 에러 메세지 내용이고, 혹시 오타 있을까봐 깃허브 코드 그대로 가져와도 동일하네요.

test_users_api.py:5 (test_user_sign_up)

{'hashed_password': 'hashed'} != {'hashed_password': 'hashed', 'username': 'test'}

Expected :{'hashed_password': 'hashed', 'username': 'test'}

Actual :{'hashed_password': 'hashed'}

expected는 적었떤 username="test"가 나와야 하는데 , 실제는 없나봅니다. 그래서
user_create.assert_called_once_with(hashed_password="hashed") 이런식을 변경하면, 아래처럼 여전히 통과 하지 못하네요

 

('test',) != ()

Expected :()

Actual :('test',)

답변 1

0

신동현님의 프로필 이미지
신동현
지식공유자

안녕하세요. 빠르게 해결하셨다니 다행입니다.
아래와 같이 arguments를 호출한 방법에 따라서 assert_called_once_with 사용 방법이 달라지게 됩니다.

  1. Keyword Arguments (강의 예시)
    User.create(username=request.username, hashed_password=hashed_password)
    user_create.assert_called_once_with(username="test", hashed_password="hashed")

 

  1. Positional Arguments
    User.create(request.username, hashed_password)
    user_create.assert_called_once_with("test", "hashed")

 

참고: https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_called_with

luke님의 프로필 이미지
luke

작성한 질문수

질문하기