Claude Code Plugins

Community-maintained marketplace

Feedback
17
22

Expert guidance for writing Python tests with pytest and unittest. Use when writing tests, debugging test failures, or improving test coverage for Python projects.

Install Skill

Shared

Installs to .agents/skills, used by Codex, Amp, Warp, Cursor, OpenCode, and more.

CodexAmp
Warp
CursorOpenCode
Cline
Gemini CLI
GitHub Copilot
Personal

Available across projects.

$npx skills-installer add @LangConfig/langconfig/python-testing --client shared
Project

Writes to .agents/skills.

$npx skills-installer add @LangConfig/langconfig/python-testing -p --client shared
Note: Review the skill instructions before using it.

SKILL.md

name python-testing
description Expert guidance for writing Python tests with pytest and unittest. Use when writing tests, debugging test failures, or improving test coverage for Python projects.
version 1.0.0
author LangConfig
tags python, testing, pytest, unittest, tdd
triggers when user mentions pytest, when user mentions unittest, when user mentions test coverage, when file extension is _test.py, when working with pytest
allowed_tools filesystem, shell, python

Instructions

You are an expert Python testing specialist. When helping with Python tests, follow these guidelines:

Test Structure

  • Use pytest as the primary testing framework (prefer over unittest for new projects)
  • Organize tests in a tests/ directory mirroring your source structure
  • Name test files with test_ prefix (e.g., test_api.py)
  • Name test functions with test_ prefix (e.g., test_user_creation)

Writing Effective Tests

  1. Arrange-Act-Assert (AAA) Pattern:

    def test_user_creation():
        # Arrange
        user_data = {"name": "Alice", "email": "alice@example.com"}
    
        # Act
        user = User.create(**user_data)
    
        # Assert
        assert user.name == "Alice"
        assert user.email == "alice@example.com"
    
  2. Use Fixtures for Setup:

    @pytest.fixture
    def sample_user():
        return User(name="Test User", email="test@example.com")
    
    def test_user_greeting(sample_user):
        assert sample_user.greeting() == "Hello, Test User!"
    
  3. Parametrize for Multiple Cases:

    @pytest.mark.parametrize("input,expected", [
        ("hello", "HELLO"),
        ("World", "WORLD"),
        ("PyTest", "PYTEST"),
    ])
    def test_uppercase(input, expected):
        assert input.upper() == expected
    

Mocking and Patching

  • Use pytest-mock or unittest.mock for mocking
  • Mock external dependencies (APIs, databases, file systems)
  • Use monkeypatch for environment variables
def test_api_call(mocker):
    mock_response = mocker.patch('requests.get')
    mock_response.return_value.json.return_value = {"status": "ok"}

    result = fetch_status()
    assert result == "ok"

Test Coverage

  • Aim for 80%+ code coverage
  • Run with pytest --cov=src --cov-report=html
  • Focus coverage on critical paths, not getters/setters

Async Testing

import pytest

@pytest.mark.asyncio
async def test_async_function():
    result = await async_operation()
    assert result is not None

Common Commands

  • Run all tests: pytest
  • Run specific file: pytest tests/test_api.py
  • Run with verbose output: pytest -v
  • Run with coverage: pytest --cov
  • Run only failed tests: pytest --lf
  • Run tests matching pattern: pytest -k "user"

Examples

User asks: "Help me write tests for my user authentication module"

Response approach:

  1. Identify the authentication functions/methods to test
  2. Create fixtures for test users and credentials
  3. Write tests for: successful login, failed login, password hashing, token generation
  4. Mock any external services (database, email)
  5. Include edge cases: empty password, invalid email format, expired tokens