Classical testing strategy involves testing specific output for specific input. For complex systems the number of I/O pairs becomes too large. Property based testing overcomes this limitations.
This talk is about Property testing, a testing technique where an assertion is made on invariant properties of output. Classical unit testing strategy involves testing if specific expected output is generated for specific input. Typically developers implement test cases where this input is supplied and assertions are made on generated output.
However, for complex systems the number of input/output pairs becomes too large to be practically implemented as separate test cases. This is a major shortcoming, which is addressed by property based testing. In property based testing, the invariant properties on output are specified. The system then can generate millions of inputs, which would be impractically impossible to manually implement, and test those assertions on generated outputs. There are a large number of open source libraries like QuickCheck, FsCheck etc. which lets you incorporate property-based testing for your projects.
This talk covers both existing libraries as well as custom implementations from first principles. It should be emphasized that property based testing does not replace existing testing techniques but supplements it. The objective of this talk is to explain why property based testing is important and enable developers to incorporate it in their projects.