Testing Strategies
Test coverage, mocking strategies, and test organization.
Overview
Master testing strategies.
Coverage
# Run with coverage
# pytest --cov=myapp --cov-report=html
# Coverage configuration in .coveragerc
[run]
source = myapp
omit = tests/*
[report]
exclude_lines =
pragma: no cover
def __repr__
raise NotImplementedError
Mocking Strategies
from unittest.mock import Mock, patch, AsyncMock
# Mock async functions
async def fetch_data():
return {"data": "test"}
@patch('__main__.fetch_data', new_callable=AsyncMock)
async def test_fetch(mock_fetch):
mock_fetch.return_value = {"data": "mocked"}
result = await fetch_data()
assert result == {"data": "mocked"}
# Mock class methods
with patch.object(MyClass, 'method', return_value="mocked"):
obj = MyClass()
assert obj.method() == "mocked"
Test Fixtures
import pytest
from datetime import datetime
@pytest.fixture
def sample_user():
return {
"name": "Alice",
"email": "alice@example.com",
"created_at": datetime.now()
}
@pytest.fixture
def mock_db():
db = Mock()
db.users.find.return_value = []
return db
def test_create_user(sample_user, mock_db):
user = create_user(sample_user, mock_db)
mock_db.users.insert.assert_called_once()
Practice
Write tests for an async API with proper mocking.