Chapter 8
Test Doubles
Functions that change state should not return values and functions that return values should not change state.
– Bertrand Meyer, Object-Oriented Software Construction
I still remember when I joined the first hardcore XP team. It was still experimental at that company, and we didn't have the funds for tools in the beginning, aside from an IDE refactoring helper. We couldn't introduce frameworks without a bureaucratic request – a troublesome authorization process lasting weeks. Nevertheless, our backlog needed to be delivered in time. That's where I had to learn to inject dependencies manually and to manually develop all test doubles. We called it "poor man dependency injection" and "poor man mocking," underscoring the fact that we were forced to re-invent the wheel for budgetary reasons.
Despite that little drag, we succeeded in delivering the backlog in time and with very few bugs. The company...