FiveAM

At the lowest level testing the system requires that certain
forms be evaluated and that certain post conditions are met: the
value returned must satisfy a certain predicate, the form must
(or must not) signal a certain condition, etc. In FiveAM these
low level operations are called 'checks' and are defined using
the various checking macros.

Checks are the basic operators for collecting results. Tests and
test suites on the other hand allow grouping multiple checks into
logic collections.

FiveAM provides the ability to automatically generate a
collection of random input data for a specific test and run a
test multiple times.

Specification testing is done through the FOR-ALL macro. This
macro will bind variables to random data and run a test body a
certain number of times. Should the test body ever signal a
failure we stop running and report what values of the variables
caused the code to fail.

When running tests we often need to setup some kind of context
(create dummy db connections, simulate an http request,
etc.). Fixtures provide a way to conviently hide this context
into a macro and allow the test to focus on testing.

NB: A FiveAM fixture is nothing more than a macro. Since the term
'fixture' is so common in testing frameworks we've provided a
wrapper around defmacro for this purpose.