Detroit vs. London Schools of Unit Testing
The Detroit and London schools define “unit test” differently, driving fundamentally different strategies. Detroit treats a unit as a unit of behavior: one or more classes collaborating to produce an observable result, using real collaborators wherever practical and only stubbing external dependencies. London treats a unit as a single class, replacing all collaborators with mocks and verifying interaction patterns.
Detroit produces more resilient tests that survive refactoring because they test outcomes rather than interactions. London provides faster fault localization but creates brittle tests that break when you reorganize code without changing behavior. For most codebases, refactoring resilience wins. You refactor far more often than you need pinpoint localization.