There are two main kinds of automated testing supported by Haskell testing libraries:
-
Unit tests, where some data is generally hardcoded. Generally, each test case will be designed to cover a class of possible inputs. They explicitly cover many cases, but if the tester forgets some corner case, it will certainly not be covered.
-
Property tests, where some data is randomly generated for the tests. This has no guarantee of covering all classes of possible inputs, but there is a large chance of capturing unforeseen corner cases.