Stubs, spies, fakes, and mocks — isolate dependencies in tests without over-mocking or testing implementation details.
Five passes over the same idea, each from a different angle. Do them in order, or jump to whichever you need.
Mocking replaces real dependencies with test doubles. Stubs return fixed values, spies record calls, fakes provide simplified implementations, and mocks verify interactions. Over-mocking makes tests brittle. Best practices: mock at boundaries (network, filesystem, clock), prefer fakes for complex dependencies, and use dependency injection.