from unittest.mock import Mock, patch
import pytest
# Function to test
def greet_user(user_service, user_id):
user_name = user_service.get_user_name(user_id)
return f"Hello, {user_name}!"
# Test function
@patch('test_module.UserService')
def test_greet_user_calls_get_user_name(mock_user_service_class):
# Arrange
mock_user_service = Mock()
mock_user_service.get_user_name.return_value = 'Alice'
mock_user_service_class.return_value = mock_user_service
user_id = 42
# Act
from test_module import greet_user
result = greet_user(mock_user_service, user_id)
# Assert
assert mock_user_service.get_user_name.called is True
assert mock_user_service.get_user_name.call_count == 1
mock_user_service.get_user_name.assert_called_with(user_id)
assert result == 'Hello, Alice!'
The test uses patch to replace UserService with a mock object.
We create a mock instance and set the return value for get_user_name.
We call the greet_user function with the mock and a user ID.
Assertions check that get_user_name was called once with the correct argument.
Finally, we verify the returned greeting string is as expected.