The document discusses strategies for testing code that is initially difficult or impossible to test, referred to as "untestable code". It provides examples of untestable code involving object construction, external resources like databases and web services, and language issues. It then describes approaches to make such code more testable, including refactoring, using mocks, dependency injection, stream wrappers, and generative programming with frames. The goal is to find ways to test existing legacy code without changing the code itself.
Related topics: