It Isn’t Testable Until It’s Tested
Testing complex systems is hard. Automating tests/checks for complex systems can be even harder. This is at least in part because of the difficulty involved in having the automate tests interact with the system-under-test to control its initial state, execute the logic in question, and inspecting the post-test state. And designing for testability in the abstract is hard to do in practice. There are so many ways to make a system hard to test!
The most sure-fire way to ensure a system is designed for testability is to drive the development of the system with automated tests, not at the unit-test level (TDD) but also at the system and component levels. What do these tests (or “examples”) look like? And how do they ensure testability of the system? That what I will be talking about.