I would personally rephrase this as unit tests are necessary, as are integration tests, as are end-to-end tests.
The testing pyramid: write most of your tests as unit tests, then write a bunch of integration tests, and finally throw in a few end-to-end tests.
> Tests make better APIs
Yes! This is such an important point. A perfect example I love is that globals and even thread-local values make testing hard, and that’s reason enough to avoid using them.
> Make tests that you know how to run on the command line
Again great advice. I would also add, get your tests running as early as feasible. This saves you rewriting APIs and other decisions that might make testing, even deployment (which you need for end-to-end tests), significantly harder.
Anyway, this entire set is a great read, and I agree with much, but not all.