These snippets showcase a variety of ways to use unittest.mock for testing in Python, including mocking functions, classes, attributes, and dependencies, as well as asserting calls and handling side effects.
1. Mocking a Simple Function
from unittest.mock import Mock# Original functiondefgreet():return"Hello!"# Mock the functionmock_greet =Mock(return_value="Hi there!")print(mock_greet())# Output: Hi there!
from unittest.mock import Mock
mock_func = Mock()
mock_func(42)
mock_func.assert_called_with(42) # Passes if called with 42
from unittest.mock import patch
# Original function
def get_data():
import requests
response = requests.get("http://example.com")
return response.status_code
# Mocking requests.get
with patch("requests.get") as mock_get:
mock_get.return_value.status_code = 200
print(get_data()) # Output: 200
from unittest.mock import patch
class MyClass:
attribute = "Original value"
with patch.object(MyClass, "attribute", "Mocked value"):
print(MyClass.attribute) # Output: Mocked value
from unittest.mock import patch
class MyClass:
def method(self):
return "Original method"
with patch("__main__.MyClass") as MockClass:
instance = MockClass.return_value
instance.method.return_value = "Mocked method"
print(instance.method()) # Output: Mocked method
from unittest.mock import Mock
def side_effect_func(arg):
return f"Processed {arg}"
mock = Mock(side_effect=side_effect_func)
print(mock("data")) # Output: Processed data
from unittest.mock import MagicMock
mock_context = MagicMock()
mock_context.__enter__.return_value = "Inside the context"
mock_context.__exit__.return_value = None
with mock_context as value:
print(value) # Output: Inside the context