# Property Based Testing

> Generative testing with QuickCheck/Hypothesis; testing properties that should hold for all inputs.

- Skill: `sethdford/property-based-testing` (Agent Skill)
- Install (CLI): `npx skillmds@latest add sethdford/property-based-testing`
- Raw SKILL.md: https://api.skillmd.com/api/skills/sethdford/property-based-testing/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: sethdford (https://skillmd.com/u/sethdford)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/sethdford/property-based-testing

---


# Property-Based Testing

Testing that properties hold for arbitrary inputs generated by the framework.

## Context

You are designing property-based tests. Describe a property (invariant) and let the framework generate hundreds of test cases.

## Domain Context

- **Properties**: "Sorting returns elements in ascending order" (invariant)
- **Generators**: Framework generates random valid inputs
- **Shrinking**: When a property fails, framework finds minimal failing case
- **Coverage**: Catches edge cases humans wouldn't think of
- **Complementary**: Use with unit tests, not replacement

## Instructions

1. **Identify Invariants**: What property must always be true? Idempotence? Commutativity?
2. **Choose Generators**: What valid inputs should be tested? Numbers, strings, lists?
3. **Write Property**: Assert the invariant; let framework vary inputs
4. **Run Generator**: Property-based test runner generates cases, looks for failures
5. **Shrink Failures**: When property fails, framework finds minimal case
6. **Document Examples**: Add unit tests for important examples alongside property tests

## Anti-Patterns

- Testing trivial properties (identity, basic I/O); waste of PBT
- Generators that are too narrow; should cover wide range of inputs
- Ignoring shrunk failures; use them to understand the bug
- Combining PBT with side effects; test pure functions
- No complementary unit tests; properties are great but unit tests provide examples

## Further Reading

- John Hughes, _QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs_
- Hypothesis documentation (Python library for PBT)

