Test doubles replace a real dependency in a test: dummy (unused object), stub (returns predefined values), fake (simplified implementation, like an in-memory repository), mock (verifies the calls received), and spy. They isolate the unit under test from a database, a network, or an external service.