Last modified: Jun 01, 2025 By Alexander Williams

Install Pytest-mock for Python Mocking Tests

Mocking is essential for isolating tests. Pytest-mock simplifies mocking in Python. This guide covers installation and usage.

What is Pytest-mock?

Pytest-mock is a plugin for Pytest. It provides a mocker fixture. This makes mocking easier in tests.

It wraps the standard unittest.mock library. The plugin integrates seamlessly with Pytest.

Why Use Pytest-mock?

Mocking helps test code in isolation. It replaces real dependencies with mock objects.

Pytest-mock offers a cleaner syntax than standard mocking. It reduces boilerplate code in tests.

Install Pytest-mock

Install Pytest-mock using pip:


pip install pytest-mock

Verify the installation:


pytest --version

You should see Pytest-mock in the list of plugins.

Basic Usage of Pytest-mock

Pytest-mock provides a mocker fixture. Use it to create mock objects.

Here's a simple example:


def test_mocking(mocker):
    mock_obj = mocker.Mock()
    mock_obj.method.return_value = 42
    
    assert mock_obj.method() == 42

The mocker.Mock() creates a mock object. You can set return values for its methods.

Mocking Functions

You can mock functions using mocker.patch:


def test_function_mock(mocker):
    mocker.patch('module.function', return_value=100)
    result = module.function()
    
    assert result == 100

This replaces module.function with a mock. The mock returns 100 when called.

Mocking Class Methods

Mocking class methods works similarly:


class MyClass:
    def method(self):
        return "real"

def test_class_mock(mocker):
    mocker.patch.object(MyClass, 'method', return_value="mock")
    obj = MyClass()
    
    assert obj.method() == "mock"

The mocker.patch.object mocks a specific method. The original method is replaced.

Asserting Mock Calls

You can verify how mocks were called:


def test_mock_calls(mocker):
    mock_func = mocker.patch('module.function')
    module.function('arg')
    
    mock_func.assert_called_once_with('arg')

This checks if the mock was called once with 'arg'.

Best Practices

Follow these tips for effective mocking:

1. Mock only what's necessary. Over-mocking makes tests brittle.

2. Use autospec=True to maintain interface consistency.

3. Clean up mocks after tests. Pytest-mock does this automatically.

Integration with Other Tools

Pytest-mock works well with other testing tools. For example, combine it with Pytest-cov for coverage reports.

You can also use it with Sphinx for documenting your tests.

Common Pitfalls

Avoid these common mistakes:

1. Mocking too much. This can hide real issues.

2. Forgetting to assert mock calls. This makes tests less valuable.

3. Not using autospec when needed. This can lead to false positives.

Conclusion

Pytest-mock simplifies mocking in Python tests. It provides a clean interface via the mocker fixture.

Install it with pip and start writing better isolated tests today. For more Python tools, check our guide on Pexpect for automation.