-they're macros with names. you can have tests (and suites)
-automatically wrap themeselves in these macros. not much else to say.
+--------------------------------
+(def-fixture mock-db ()
+ (let ((*database* (make-instance 'mock-db))
+ (*connection* (make-instance 'mock-connection)))
+ (unwind-protect
+ (&body) <1>
+ (mock-close-connection *connection*))))
+
+(with-fixture mock-db ()
+ (is-true (database-p *database*)))
+
+<1> This is a local macro named 5AM:&BODY (the user of def-fixture can
+not change this name)
+
+--------------------------------
+
+The body of the `def-fixture` has one local function (actually a local
+macro) called `&body` which will expand into whatever the body passed
+to `with-fixture` is. `def-fixture` also has an argument list, but
+there are two things to note: 1) in practice it's rarely used; 2)
+these are arguments will be bound to values (like defun) and not
+source code (like defmacro).