Skip to content
Back to skills

Testing Mocking

ASecurity

Implements mocking strategies for unit testing by providing controlled, predictable interactions with dependencies.

  • 4 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added June 12, 2026
testingpythontestingapidatabasedocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Scanned June 12, 2026

npx -y skills add paulpas/agent-skill-router --skill testing-mocking --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Testing Mocking?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Testing Mocking
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/paulpas-testing-mocking/badge)](https://www.skillsdirectory.com/skills/paulpas-testing-mocking)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---




name: testing-mocking
description: Implements mocking strategies for unit testing by providing controlled, predictable interactions with dependencies.
license: MIT
compatibility: opencode
metadata:
  version: "1.0.0"
  domain: coding
  triggers: mocking, test doubles, mock objects, unit testing, how do I mock
  role: implementation
  scope: implementation
  output-format: code
  related-skills: testing-stubbing, testing-test-doubles
  archetypes:
    - tactical
  anti_triggers:
    - brainstorming
    - vague ideation
  response_profile:
    verbosity: low
    directive_strength: high
    abstraction_level: operational




---





# Mocking Strategies

Implements strategies for creating mock objects to test interactions in unit tests without relying on real dependencies.

## When to Use

- When you need controlled, predictable interactions in your unit tests.
- When testing components that have external dependencies (like databases or APIs).
- When verifying that certain methods are called with expected parameters.

## Core Workflow

1. **Identify Dependency** — Determine which external service or component needs to be mocked.
2. **Create Mock** — Utilize a mocking framework to create a mock object of the dependent service.
3. **Define Behavior** — Specify the behavior of the mock to return expected results during the test.
4. **Verify Interactions** — Use assertions to ensure that the mock was interacted with as expected during the test execution.

## Implementation Patterns

### Pattern 1: Basic Mock Creation and Behavior Definition

```python
from unittest.mock import Mock, MagicMock, call


def test_mock_basic_behavior():
    """Demonstrate basic mock creation and return value setup."""
    # Create a mock service dependency
    mock_service = Mock()
    mock_service.get_user.return_value = {"id": 1, "name": "Alice", "email": "alice@example.com"}

    # Call the method under test (which uses the mocked dependency)
    result = fetch_user(mock_service, 1)

    # Assert the result is correct
    assert result == {"id": 1, "name": "Alice", "email": "alice@example.com"}
    # Verify the mock was called correctly
    mock_service.get_user.assert_called_once_with(1)


def fetch_user(user_service, user_id: int) -> dict:
    """Simulated function under test."""
    return user_service.get_user(user_id)


def test_mock_multiple_calls():
    """Verify call order and arguments across multiple invocations."""
    mock_api = Mock()
    mock_api.fetch_orders.side_effect = [
        [{"id": 101, "total": 50.0}],
        [{"id": 102, "total": 75.0}],
    ]

    result = process_orders(mock_api)

    assert len(result) == 2
    assert mock_api.fetch_orders.call_count == 2
    # Verify exact call sequence
    mock_api.fetch_orders.assert_has_calls([call(), call()])


def process_orders(api_client):
    """Simulated function that processes multiple orders."""
    orders = api_client.fetch_orders()
    return [{"processed": True, **order} for order in orders]
```

### Pattern 2: Mocking with Side Effects and Exception Simulation

```python
from unittest.mock import patch, MagicMock
import time


def test_mock_side_effect():
    """Use side_effect to simulate dynamic or stateful behavior."""
    mock_counter = Mock()
    call_count = [0]

    def increment_side_effect(*args, **kwargs):
        call_count[0] += 1
        return {"count": call_count[0], "status": "success"}

    mock_counter.get_status.side_effect = increment_side_effect

    # Each call returns an incremented value
    assert mock_counter.get_status() == {"count": 1, "status": "success"}
    assert mock_counter.get_status() == {"count": 2, "status": "success"}
    assert mock_counter.get_status.call_count == 3


def test_mock_exception_simulation():
    """Mock a dependency to raise exceptions for error path testing."""
    with patch("myapp.payment_service.charge") as mock_charge:
        mock_charge.side_effect = ConnectionError("Payment gateway unreachable")

        try:
            checkout({"item": "widget", "qty": 1})
        except ConnectionError as e:
            assert str(e) == "Payment gateway unreachable"
        else:
            assert False, "Expected ConnectionError to be raised"


def test_mock_return_value_generator():
    """Use a generator for side_effect to simulate exhaustion after N calls."""
    mock_db = Mock()
    mock_db.query.side_effect = iter([
        [{"id": 1}, {"id": 2}],
        [],  # Simulates running out of results
    ])

    page1 = get_results(mock_db)
    assert len(page1) == 2

    page2 = get_results(mock_db)
    assert len(page2) == 0


# --- Example: Full integration test with mocking ---

def test_user_registration_flow():
    """Integration-style test using multiple mocks for the full registration flow."""
    with patch("myapp.services.email_service.send_welcome") as mock_email, \
         patch("myapp.services.auth_service.create_token") as mock_token, \
         patch("myapp.models.user.User.create") as mock_user_create:

        # Configure mock behaviors
        mock_user_create.return_value = {"id": "usr_123", "email": "new@example.com"}
        mock_token.return_value = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
        mock_email.return_value = True

        # Execute the registration flow
        result = register_user("new@example.com", "SecurePass123!")

        # Verify all interactions
        assert result["status"] == "success"
        assert result["token"] == "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
        mock_user_create.assert_called_once()
        mock_email.assert_called_once_with("new@example.com")
        mock_token.assert_called_once()
```

## Constraints

### MUST DO
- Write unit tests that cover the happy path, boundary conditions, and failure modes for each function
- Use parameterized tests to cover multiple input combinations without duplicating test logic
- Mock external dependencies (APIs, databases, file system) with strict interface contracts — never mock implementation details
- Maintain a minimum of 80% code coverage for critical paths; prioritize path coverage over line coverage

### MUST NOT DO
- Do not write tests that test the standard library or framework behavior — test your code, not their code
- Avoid fragile tests that depend on implementation details (exact method call order, string formatting) instead of observable outcomes
- Never include network calls, database writes, or file system operations in unit tests — use mocks and fixtures
- Do not name tests with vague descriptions like 'test_function' — each test name should describe the scenario being verified


## Live References

> Authoritative documentation links for this skill's domain. The model follows markdown links at load time to resolve external references and inline content.

- [unittest.mock — Python Official Docs](https://docs.python.org/3/library/unittest.mock.html)
- [Mock Objects in Testing (Martin Fowler)](https://martinfowler.com/articles/mocksArentStubs.html)
- [pytest-mock Plugin Documentation](https://pytest-mock.readthedocs.io/en/latest/)
- [MagicMock vs Mock — When to Use Each](https://docs.python.org/3/library/unittest.mock.html#magicspecifying-allowed-methods-and-attributes)
- [Side Effects and Return Values in unittest.mock](https://docs.python.org/3/library/unittest.mock.html#side-effects)
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.