# Pytest Mastery

> Deep expertise in the pytest framework, mocking strategies, and Test Use when this capability is needed.

- Skill: `tomevault-io/pytest-mastery` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/pytest-mastery`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/pytest-mastery/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/pytest-mastery

---


# Pytest Mastery
_Deep expertise in the pytest framework, mocking strategies, and Test Driven Development._

## Knowledge
* #### The Testing Standard: Pytest
      *   **Framework:** We strictly use `pytest`. Do not use the legacy 
          `unittest` class-based style unless absolutely necessary for legacy 
          compatibility.
      *   **Discovery:** Test files must be named `test_*.py` or `*_test.py`. 
          Test functions must start with `test_`.
      *   **Structure:** Tests live in a `tests/` directory that mirrors the 
          `src/` package structure.
* #### The "Arrange, Act, Assert" Pattern
      Every test must follow this logical flow:
      1.  **Arrange:** Set up the state (variables, mocks, fixtures).
      2.  **Act:** Call the function/method under test.
      3.  **Assert:** Verify the result matches expectations using simple 
          `assert` statements.
* #### Isolation & Mocking
      *   **Unit Tests must be Hermetic:** They never touch the network, the 
          filesystem, or the database.
      *   **Tools:** Use `unittest.mock` (specifically `patch` and `MagicMock`) 
          to stub out external dependencies.
      *   **Fixtures:** Use `pytest.fixture` in `conftest.py` for shared setup 
          logic to keep test bodies clean.

## Abilities
* Utilize `pytest.mark.parametrize` to test multiple input/output scenarios with a single test function (Data-Driven Testing).
* Write 'Negative Tests' that verify the code raises specific Exceptions (`pytest.raises`) when given invalid input.
* Refactor complex setup code into reusable Fixtures.
* Achieve high code coverage by targeting edge cases, not just happy paths.

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/nick-orton) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

