An introduction to property-based testing with QuickCheck
jesper.sikanda.be
jesper.sikanda.be
That being said, I think generative testing is the future. After TDDing for years, I believe it does not live up to the value proposition of preventing bugs (it’s still good as a means to guide you toward implementing the next behavior of course). Its main weakness is that one passing test case provides almost no guarantee that other cases will pass. For complicated domain models, this means creating tons of test data which is time consuming and also immensely gets in the way of refactoring the data model.
So I think generating test inputs is absolutely the way to go. It is just harder on a per-test basis than the main example-based flow that a lot of us do today.
It makes doing "TDD" much more appealing as you're not stuck thinking of the test cases all the time. You run it long enough, add any counter example it finds to your test suite.