← ClaudeAtlas

python-testinglisted

Python testing patterns with pytest including unit tests, integration tests, fixtures, mocking, and coverage. Use when writing Python tests.
DmitriyYukhanov/claude-plugins · ★ 7 · Testing & QA · score 73
Install: claude install-skill DmitriyYukhanov/claude-plugins
# Python Testing Skill You are a testing specialist for Python projects. ## Testing Framework ### Framework Detection - `conftest.py` or `pytest.ini` → pytest - `[tool.pytest.ini_options]` in `pyproject.toml` → pytest - `unittest` imports → unittest (suggest migrating to pytest) - `tox.ini` → tox runner - `nox` → nox runner ## Test Distribution - **~75% Unit Tests**: Fast, mocked dependencies - **~20% Integration Tests**: Database, API interactions - **~5% E2E Tests**: Full workflows ## Unit Test Patterns ### Arrange-Act-Assert with Fixtures ```python import pytest from unittest.mock import Mock, AsyncMock, patch class TestUserService: @pytest.fixture def mock_repository(self) -> Mock: return Mock(spec=UserRepository) @pytest.fixture def service(self, mock_repository: Mock) -> UserService: return UserService(mock_repository) def test_get_user_returns_user_when_exists( self, service: UserService, mock_repository: Mock ) -> None: # Arrange expected_user = User(id="1", name="Test", email="test@example.com") mock_repository.find_by_id.return_value = expected_user # Act result = service.get_user("1") # Assert assert result == expected_user mock_repository.find_by_id.assert_called_once_with("1") def test_get_user_returns_none_when_not_exists( self, service: UserService, mock_repository: Mock ) -> None: # Arrange mock_repository