This chapter covers the concept of test doubles and explains various test double types, such as mock, fake, dummy, stub, and spy. Sometimes, it is not possible to unit test a piece of code because of unavailability of collaborator objects or the cost of instantiation for the collaborator. Test doubles alleviate the need for a collaborator.
We know about stunt doubles—a trained replacement used for dangerous action sequences in movies, such as jumping out of the Empire State building, a fight sequence on top of a burning train, jumping from an airplane, or similar actions. Stunt doubles are used to protect the real actors or chip in when the actor is not available.
While testing a class that communicates with an API, you don't want to hit the API for every single test; for example, when a piece of code is dependent on database access, it is not possible to unit test the code unless the database is accessible. Similarly, while testing a class that communicates with a...