The (Little) QuickCheck Workbook
The (Little) QuickCheck Workbook
Experience Property-Based Testing in Haskell
About the Book
This is an in-progress book, we've just field-tested the first exercises. We don't know how big it's going to be, we currently guess around 70 to a 100 pages when finished. Get the book, give feedback and influence what it will be :-).
Although the QuickCheck library has been around since 2000, and has more recently been ported to several other languages, we believe more teams could benefit from using it in anger.
We've been doing example based testing since 1999, and believe property-based testing is a valuable and fun addition to our toolbag. Property-based testing also influences our design, and writing this book is a way to explore how our designs are influenced.
Example based approaches like BDD and TDD focus on what changes. Given we have state x, When event y happens we'll have state z.
Property based testing forces you to think about things that stay the same: invariant properties of your code, and forces you to capture these invariants explicitly.
Although the QuickCheck library has been around since 2000, and has more recently been ported to several other languages, we believe more teams could benefit from using it in anger.
We've been doing example based testing since 1999, and believe property-based testing is a valuable and fun addition to our toolbag. Property-based testing also influences our design, and writing this book is a way to explore how our designs are influenced.
Example based approaches like BDD and TDD focus on what changes. Given we have state x, When event y happens we'll have state z.
Property based testing forces you to think about things that stay the same: invariant properties of your code, and forces you to capture these invariants explicitly.
Benefits
- Understand existing libraries, quickly test a wide range of cases (e.g. numeric types or libraries to represent money) or legacy code.
- Test validation logic with very good test/code ratio.
- Test mappings / adapters / marshalling. Properties let us easily exploit symmetries between input and output here.
- Find pesky corner cases
- Find out why a regular unit tests sometimes passes, and sometimes doesn't (flickering tests)
How does Property Based Testing work?
- you define properties - invariants of the system-under-test
- the property based testing library generate lots of random input data
- the system under test is run with this input data and the testing library verifies that the invariants hold under all inputs.
There are many implementations of QuickCheck, but the original one is in Haskell. We chose to write this book with Haskell to experience it at the source. Some knowledge of Haskell is required, but not too much - we've tested some of the material at a conference and it seemed to work for people who don't use Haskell in their day job. We'll incorporate your feedback so we can make it as approachable as possible.
Open the book, flex your property-writing muscles, have fun and profit!
Table of Contents
-
Foreword
- Work in progress
- Changelog
- Known defects
-
What is Property Based Testing?
- Benefits
- Key concepts
- I want this in my favorite language!
-
Getting Started
- Before this chapter you need to…
- After this section you will…
- Let’s go
-
Debugging {#sec:debugging}
- Using standard haskell debugging
- Playing with the number of test cases
- Expecting failure
- TODO explain use of sample to see what data gets generated.
- Running only the failing property
-
Basic generators and Properties - Menu Sorting
- Menu Sorting - What is in a String?
- Sorting with words
- Sorting and sampling food records
-
Modelling Money
- Getting started
- Currency Properties
- Implement behaviour for Money
- Exercise: Money allocation
- Exercise: Converting from string
- Reflection
- A suite of properties
-
A vending machine with a coin box
- Getting started
- Mutating state: doing checkouts
- Inserting coins
- Possible next steps
-
Legacy code - The Gilded Rose Kata
- Exercise
- TODO
- What did you learn?
-
Chapters we’ll write if you want us to
- Worked through examples for each exercise
- Lazyness to the max - Auto-generalize your code and properties with quickspec
- Testing concurrency
- Specify a DSL by example
- Legacy code and coverage
- Testing with State - REST APis
- Using QuickCheck for end-to-end tests with Selenium Webdriver
-
Useful reading for QuickCheck
- Original papers
- Original tutorial and API Docs
- Integratiion with other test frameworks
- Hspec
- Tasty
- Up and downsides of both
-
Things to explore
- Reusing properties across typeclasses
- Using Property based tests for stateful applications
- Testing legacy code
- Essays including QuickCheck as part of a wider discussion
-
Appendix - From the cutting room floor
- A note about test oracles
- References
The Leanpub 60 Day 100% Happiness Guarantee
Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.
Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.
You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!
So, there's no reason not to click the Add to Cart button, is there?
See full terms...
Earn $8 on a $10 Purchase, and $16 on a $20 Purchase
We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.
(Yes, some authors have already earned much more than that on Leanpub.)
In fact, authors have earnedover $14 millionwriting, publishing and selling on Leanpub.
Learn more about writing on Leanpub
Free Updates. DRM Free.
If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).
Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.
Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.
Learn more about Leanpub's ebook formats and where to read them