<html>
  <head>
    <title>package groovy.mock.interceptor</title>
  </head>
  <body>
    <p>The groovy.mock.interceptor is an all-groovy mock testing library.</p>
    <p>Terms:</p>
    <dl>
        <dt>Callaborator</dt>
        <dd>An ordinary Groovy or Java class that's instance or class methods
        are to be called. Calling them can be time consuming or produce side effects that
        are unwanted when testing (e.g. database operations). </dd>

        <dt>Caller</dt>
        <dd>A Groovy Object that calls methods on the Collaborator, i.e.
        collaborates with it.</dd>

        <dt>Mock</dt>
        <dd>An object that can be used to augment the Collaborator.
        Method calls to the Collaborator will be handled by the Mock, showing a <em>demanded</em>
        <em>behavior</em>. Method calls are <em>expected</em> to occur <em>strictly</em> in the <em>demanded</em>
        sequence with a given <em>range</em> of cardinality. The <em>use</em> of a Mock implicitely
        ends with <em>verifying</em> the <em>expectations</em>.
        </dd>

        <dt>Stub</dt>
        <dd>Much like a Mock but the <em>expectation</em> about sequences of method calls on the Collaborator is
        <em>loose</em>, i.e. calls may occur out of the demanded order as long as the <em>ranges</em>
        of cardinality are met. The <em>use</em> of a Stub does <em>not</em> end with an implict
        <em>verification</em> since the stubbing effect is typically asserted on the Caller.
        An explicit call to <em>verify</em> can be issued to assert all demanded method call
        have been effected with the specified cardinality.</dd>
    </dl>

    <p>Features:</p>
    <ul>
        <li>typical mock style of <em>failing early</em></li>
        <li>mocks instance and class methods</li>
        <li>mocks final methods and final Collaborators</li>
        <li>mocks Groovy and Java Collaborators (but Caller must be groovy)</li>
        <li>can mock all objects of a given class (or a single Groovy object)</li>
        <li>mocks even if Collaborator cannot be injected into the Caller</li>
        <li>mocks even if Collaborator is not accesible on the Caller (no getter)</li>
        <li>demanded calls specified via recording calls on the Demand object (EasyMock style).</li>
        <li>cardinality specified as Ranges, default is 1..1; 'optional' can be achieved with 0..1</li>
        <li>behavior specified via Closures, allowing static or calculated return values, throwing exceptions,
            asserting argument values, etc. (even tricky sequence constraints
            by sharing state in the testMethod scope between the behavior Closures)</li>
        <li>matching parameter list specified via Closure's parameter list, supporting
            typed or untyped params, default params, and varargs.</li>
        <li>not dependent on any external mock library</li>
    </ul>
   <p>For an extensive list of usages see the unit tests in this package.</p>
  </body>
</html>