Terminology used when discussing test doubles has often been confused, historically. To alleviate confusion, at least within the scope of using the Doubles library, the following definitions are provided:
- test double
- An object that stands in for another object during the course of a test. This is a generic term that describes all the different types of objects the Doubles library provides.
- A test double that returns a predetermined value when called.
- A test double that has a full implementation that determines what value it will return when called.
- A test double that expects to be called in a certain way, and will cause the test to fail if it is not.
- pure double
- A basic test double that does not modify any existing object in the system.
- partial double
- A test double that modifies a real object from the production code, doubling some of its methods but leaving others unmodified.
- verifying double
- A test double that ensures any methods that are doubled on it match the contract of the real object they are standing in for.
- A declaration that one of an object’s methods can be called. This is the manner by which stubs are created.
- A declaration that one of an object’s methods must be called. This is the manner by which mocks are created.
Examples of each of these are provided in the Usage section.