Advanced Topic 46 of 50 Software Engineering
Property-Based Testing
Checking invariants against many generated inputs.
How it works
Property-based testing checks that general properties hold for many automatically generated inputs, instead of testing specific hand-written examples. You describe invariants, such as reversing a list twice returns the original, and the framework generates hundreds of random inputs, finds a failing case and shrinks it to a minimal counterexample. Tools include QuickCheck, Hypothesis, fast-check and jqwik.
Step-by-step walkthrough
- Describe a general rule, such as reversing a list twice returns it.
- The framework generates hundreds of random inputs.
- It checks the rule for each.
- On failure it shrinks the input to a minimal counterexample.
- It finds edge cases you never thought of.
Where it is used
Testing parsers, serializers with round-trip properties, sorting and data-structure invariants, state machines, API behavior and compatibility between implementations use property-based tests, which are good at finding edge cases people did not think of.
Common pitfall
Writing good properties is harder than writing examples, and weak properties pass trivially. Generators must produce realistic inputs, or tests miss real bugs. Nondeterministic failures need the seed saved to reproduce. Combine with example-based tests, keep properties simple and keep generators and runtime bounded.
Where it fits in the course
Property-Based Testing is topic 46 of 50 in Software Engineering, rated Advanced. It follows Mutation Testing. The next topic is Chaos Engineering.
Practice and explore
- Open the interactive lesson, with a mini quiz.
- Take the Software Engineering quiz.
How to study this topic
- Read the explanation above and restate the definition in your own words.
- Open the interactive lesson and answer its mini quiz.
- Read the common pitfall, then write a short example that avoids it.
- Check your understanding in the Software Engineering quiz, and revisit the topic if you miss a question.
Frequently asked questions
What is Property-Based Testing?
Where do people use Property-Based Testing?
What is the most common mistake with Property-Based Testing?
What should I learn before this topic?
How can I practice it?
Is Property-Based Testing hard to learn?
How long does it take to learn Property-Based Testing?
Which topics are related to Property-Based Testing?
What should I study after Property-Based Testing?
Related topics
- Mutation Testing (Software Engineering)
- Chaos Engineering (Software Engineering)
- Formal Verification (Software Engineering)
- Site Reliability Engineering (Software Engineering)
- Hypothesis Testing (Math for Computing)
- Penetration Testing (Security & Cryptography)
- Trunk-Based Development (DevOps & Tooling)