Advanced Testing Techniques

Python TestingFree Lesson

Advertisement

Advanced Testing Techniques

Property-based testing, mutation testing, and test patterns.

Overview

Master advanced testing techniques.

Property-Based Testing

from hypothesis import given, strategies as st

@given(st.lists(st.integers()))
def test_sort_returns_sorted(lst):
    result = sorted(lst)
    assert result == sorted(result)
    assert len(result) == len(lst)

@given(st.text(), st.text())
def test_concat_length(a, b):
    result = a + b
    assert len(result) == len(a) + len(b)

# Run with: pytest --hypothesis-show-statistics

Mocking Best Practices

from unittest.mock import Mock, patch, MagicMock

# Mock at the right level
@patch('myapp.services.requests')
def test_api_call(mock_requests):
    mock_requests.get.return_value.status_code = 200
    mock_requests.get.return_value.json.return_value = {"data": "test"}
    
    result = fetch_data()
    assert result["data"] == "test"
    mock_requests.get.assert_called_once()

# Use autospec for type safety
mock_db = MagicMock(spec=Database)
mock_db.query.return_value = [{"id": 1}]

Test Fixtures

import pytest

@pytest.fixture(scope="session")
def database():
    db = create_test_database()
    yield db
    db.drop_all()

@pytest.fixture(autouse=True)
def clean_db(database):
    yield
    database.session.rollback()

def test_user_creation(database):
    user = User(name="Alice")
    database.session.add(user)
    database.session.commit()
    assert user.id is not None

Practice

Write property-based tests for a data structure.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement