本文へ移動
cccskills
無料GitHub で公開

python3-test-design

Guides pytest test architecture for Python 3.11+ using behavioral contracts, risk, and maintenance-adjusted value. Use when choosing unit/integration/property/e2e boundaries, fixture strategy, coverage measurement, or mutation testing. Preserves existing project gates but does not invent test-pyramid ratios, coverage percentages, mutation-score targets, or tests for implementation detail.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Python Test Design Skill

Design Python tests under the shared rules in /python-engineering:standards-for-python-development. Repository requirements and established project gates take precedence. This skill adds Python/pytest-specific boundary and fixture guidance; it does not create a second testing philosophy.

Decision order

  1. Establish the supported behavior, contract, callers/consumers, existing protection, and relevant failure consequence before deciding what test to retain.
  2. Separate direct validation of the current change from permanent regression protection.
  3. Prefer the highest stable contract boundary that still discriminates the consequential failure with acceptable cost and diagnostics.
  4. Keep unit tests TDD-sized: one small behavioral slice that survives behavior-preserving refactors.
  5. Do not mirror private helpers, branches, constants, incidental call counts, or decomposition unless those details are themselves authoritative contracts.
  6. Preserve an existing repository coverage/mutation gate. When none exists, do not invent one.

Boundary selection

Unit / function

Use when a small boundary is itself stable, drives the next TDD behavior, or uniquely distinguishes an important fault more cheaply than broader evidence. Pure functions and algorithms often fit here, but their implementation branches do not automatically become permanent test obligations.

Integration / contract / lifecycle

Use when the guarantee depends on component composition: databases, filesystems, protocols, serialization consumers, packaging/startup, transactions, persistence, authorization, retries, recovery, or multi-step state transitions. Prefer this boundary over duplicated white-box unit tests when it protects the same externally meaningful failure and remains diagnosable.

Property-based / stateful

Use Hypothesis when a justified invariant spans many inputs or action sequences and examples would poorly represent the state space. Justify the invariant independently; round trips alone can preserve paired bugs.

from hypothesis import given, strategies as st


@given(st.lists(st.integers()))
def test_sort_preserves_elements(data: list[int]) -> None:
    assert sorted(sorted(data)) == sorted(data)

BDD / acceptance

Use when user-visible workflow requirements benefit from scenario language or stakeholder-readable acceptance evidence. Do not add a BDD layer merely to duplicate an existing contract test.

Fixtures and doubles

Use the smallest fixture structure that keeps scenario, action, observation, and cleanup legible. Prefer factories/builders when they reduce genuine repeated setup; do not build a parallel fixture framework that reproduces production complexity.

Use fakes/mocks at real seams. State what a double removes from observation and do not mock away the mechanism the test is intended to challenge. For important integration assumptions, validate the double against the real dependency where practical.

Coverage

Coverage is measurement, not a universal quality score.

  • Respect a repository's existing fail_under or equivalent gate when one is configured.
  • When no gate exists, enable useful branch/missing-line reporting without inventing a percentage.
  • Inspect uncovered changed behavior for risk; do not create tests solely to raise the number.
  • Do not infer suite value from test counts or unit/integration/e2e ratios.

Example measurement configuration without a new threshold:

[tool.coverage.run]
branch = true
source = ["src"]
omit = ["**/tests/**", "**/__pycache__/**"]

[tool.coverage.report]
show_missing = true
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "raise NotImplementedError",
]

Mutation testing

Use mutation testing only when it materially strengthens confidence in important logic and the mutations reach the intended behavioral observation. Preserve a project mutation gate if one exists; otherwise do not invent a mutation-score target.

uv run mutmut run --paths-to-mutate=packages/auth/
uv run mutmut results

A mutant killed by import/collection/setup failure does not prove that the intended test detects the relevant defect.

Test organization

Follow the existing project's layout. For a new pytest project, separate boundaries only when the distinction improves execution or ownership, for example:

tests/
├── conftest.py
├── unit/
├── integration/
└── e2e/

Do not create directories or test categories merely to satisfy a pyramid shape.

Related resources

  • Agent: python-engineering:python-pytest-architect for implementation
  • Skill: python-engineering:standards-for-python-development for shared Python rules
  • Skill: python-engineering:python3-testing for pytest implementation patterns

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Add automated documentation updater to any Claude skill. Creates a Python sync script that downloads upstream docs, processes markdown for AI consumption, and maintains local cache with configurable refresh. Collects template variables, then delegates implementation through 5-phase workflow. Use when adding auto-updating reference documentation to plugins or skills.

日本語の概要は準備中です。原文の説明を表示しています。

Jamie-BitFlight/claude_skills672026年10月9日 更新

SAM-style feature initiation workflow — discovery through codebase analysis, architecture spec, task decomposition, validation, and context manifest. Use when a user asks to add a feature, plan a feature, or convert an idea into an executable SAM plan.

日本語の概要は準備中です。原文の説明を表示しています。

Jamie-BitFlight/claude_skills672026年10月9日 更新

Browser automation for AI agents using the agent-browser CLI and Playwright. Use when navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging into sites, or automating any browser task. Triggers on "open a website", "fill out a form", "click a button", "scrape data", "test this web app", "automate browser actions", or any programmatic web interaction request.

日本語の概要は準備中です。原文の説明を表示しています。

Jamie-BitFlight/claude_skills672026年10月9日 更新

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.

日本語の概要は準備中です。原文の説明を表示しています。

Jamie-BitFlight/claude_skills672026年10月9日 更新

Runs the description-drift experiment — spawns all Claude Code agents simultaneously to collect self-reported capabilities, then compares them against static frontmatter descriptions to reveal how reliable orchestrator routing based on descriptions actually is. Use when measuring description drift across the agent fleet, re-running the capability collection experiment, analyzing a specific agent's self-reported capabilities, or auditing whether frontmatter descriptions accurately reflect agent behavior.

日本語の概要は準備中です。原文の説明を表示しています。

Jamie-BitFlight/claude_skills672026年10月9日 更新

Create or adapt Claude Code agent definitions. Use when creating an agent, changing subagent configuration, selecting agent scope, or designing a specialized delegation role.

日本語の概要は準備中です。原文の説明を表示しています。

Jamie-BitFlight/claude_skills672026年10月9日 更新

Jamie-BitFlight のスキルをすべて見る

このスキルの問題を報告する