Difference between revisions of "Property Based Developer Testing"
From CitconWiki
Jump to navigationJump to search(2 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
Proposed by [[Paul Holser]] | Proposed by [[Paul Holser]] | ||
+ | |||
+ | * Amounts to adding "for-all" style assertions about a function to some "there-exists" style tests. | ||
+ | * Works best on already-TDD'ed code. TDD builds up designs example by example. Hard to see the "for-all" statements without data point to triangulate from. | ||
+ | * Agitar does something similar -- execute code using lots of different kinds of inputs, possibly deriving interesting data points by inspecting the test subject itself... | ||
+ | * Works well on already "math-y" domains | ||
+ | * Drives you, if you're paying attention, away from Primitive Obsession and modeling things like SKUs, Prices, SSNs, etc. as first-class concepts. Otherwise generators miss too much, or try to create invalid things. | ||
+ | |||
+ | = Literature = | ||
+ | * [http://natpryce.com/articles/000802.html Property Based TDD at SPA 2013] | ||
+ | * [http://shareandenjoy.saff.net/tdd-specifications.pdf The Practice of Theories: Adding "For-all" Statements to "There-exists" tests] | ||
+ | * [http://debasishg.blogspot.com/2012/07/property-based-testing-for-domain-models.html Property based testing for domain models] | ||
+ | * [http://blog.jessitron.com/2013/04/property-based-testing-what-is-it.html Property-based testing: What is it?] | ||
+ | * [http://book.realworldhaskell.org/read/testing-and-quality-assurance.html Real World Haskell: testing and quality assurance] | ||
+ | * [http://www.slideshare.net/FranklinChen/handout-18644963 Beyond xUnit exampled-based testing: property-based testing with ScalaCheck] | ||
+ | * [https://gist.github.com/npryce/4147916 Property-Based Testing Tools] | ||
+ | * [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.208.6016&rep=rep1&type=pdf Theory-infected: Or How I Learned to Stop Worrying and Love Universal Quantification] | ||
= Tooling: = | = Tooling: = | ||
Line 16: | Line 32: | ||
* [https://github.com/DRMacIver/hypothesis Hypothesis] | * [https://github.com/DRMacIver/hypothesis Hypothesis] | ||
* [https://github.com/dbravender/qc qc] | * [https://github.com/dbravender/qc qc] | ||
+ | |||
+ | == Ruby == | ||
+ | * [https://github.com/IKEGAMIDaisuke/rushcheck rushcheck] | ||
+ | * [https://github.com/hayeah/rantly rantly] | ||
+ | |||
+ | == Haskell == | ||
+ | * [http://www.cse.chalmers.se/~rjmh/QuickCheck/ QuickCheck] | ||
+ | |||
+ | == Erlang == | ||
+ | * [http://www.protest-project.eu/ ProTest] |
Latest revision as of 07:52, 26 August 2013
Session at CITCONNA2013Sessions
Proposed by Paul Holser
- Amounts to adding "for-all" style assertions about a function to some "there-exists" style tests.
- Works best on already-TDD'ed code. TDD builds up designs example by example. Hard to see the "for-all" statements without data point to triangulate from.
- Agitar does something similar -- execute code using lots of different kinds of inputs, possibly deriving interesting data points by inspecting the test subject itself...
- Works well on already "math-y" domains
- Drives you, if you're paying attention, away from Primitive Obsession and modeling things like SKUs, Prices, SSNs, etc. as first-class concepts. Otherwise generators miss too much, or try to create invalid things.
Literature
- Property Based TDD at SPA 2013
- The Practice of Theories: Adding "For-all" Statements to "There-exists" tests
- Property based testing for domain models
- Property-based testing: What is it?
- Real World Haskell: testing and quality assurance
- Beyond xUnit exampled-based testing: property-based testing with ScalaCheck
- Property-Based Testing Tools
- Theory-infected: Or How I Learned to Stop Worrying and Love Universal Quantification