[Python] Exception handling in FastAPI

Discussão em 'Python' iniciado por Stack, Abril 19, 2025.

  1. Stack

    Stack Membro Participativo

    Seeing issue in unit test of exception case in FastAPI route.

    Having following route configuration:

    @router.get("/{user_id}", response_model=UserDbData, responses={
    404: {"model": ErrorMessage},
    500: {"model": ErrorMessage}
    })
    def get_user(user_id: str, db_session: Session = db_session):
    """Route for providing user information
    """
    log.info(f"Handling user get request for id: {user_id}")

    user: UserDbData
    try:
    user: UserDbData = UserService(db_session).get_user(user_id)
    except UserInvalidException:
    log.error(f"User_id:{user_id} do not exist.")
    return error_response(
    status_code=status.HTTP_404_NOT_FOUND,
    message=ErrorMessage(detail=f"User_id:{user_id} do not exist.")
    )
    except UserReadException:
    log.error(f"Issue in querying data for user_id:{user_id}")
    return error_response(
    status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
    message=ErrorMessage(detail=f"Issue in querying data for user_id:{user_id}")
    )
    else:
    log.debug(f"User info for id: {user_id}, is: {user}")
    return user


    When I am trying to test the exception cases of the route, I am not able to get response from except clause:

    @patch('user.service.UserService.get_user')
    def test_user_get_invalid_user_response(mock_get_user):
    """Testing get user route - invalid user respose case"""
    mock_get_user.side_effect = UserInvalidException("")
    response = client.get("/user/sam21")
    assert response.status_code == 404


    I am getting following issue in pytest:

    self = <MagicMock name='get_user' id='4359134512'>, args = ('sam21',), kwargs = {}, effect = UserInvalidException('')

    def _execute_mock_call(self, /, *args, **kwargs):
    # separate from _increment_mock_call so that awaited functions are
    # executed separately from their call, also AsyncMock overrides this method

    effect = self.side_effect
    if effect is not None:
    if _is_exception(effect):
    > raise effect E health_manager.user.exceptions.UserInvalidException

    Continue reading...

Compartilhe esta Página