A Cynical Introduction To Testing¶
Don’t Feel Bad¶
- You might feel bad that you write fewer tests than you “should”.
 - “Testing is the dental floss of development” – Ned Batchelder
 - Don’t get mad, get even.
 
All Code Is Terrible¶
- All code is terrible.
 - There is no shame in writing terrible code.
 - There is only shame in having more code than is strictly necessary for a purpose.
 - It’s costly for both the originator and a future reader.
 
How Do I Avoid Shame?¶
- Test everything.
 - It’s an entirely mechanical process. Use no judgment.
 - Accept that it will make you “slower”.
 - Requiring healthy test coverage of your code tends to mean you write less domain code. This is a good thing.
 
I Mean Everything¶
- Wrap your brain around it, roll it around on the tongue: everything.
 - No function too small.
 - Code that is proven to work repeatably is beautiful. Even terrible code.
 - Not unusual to have 2X more test code than “real” code in a given project.
 
Proving It Works Isn’t The Goal¶
“It’s silly to prove that a function that does “return 1+1” always returns 2.”
Not the only goal. It’s at best a distant third reason.
The first and second goals are:
- detect regressions caused by future maintenance (“return 1+2”).
 - use testing as a thinking tool for improving code in real time.
 
But It Makes Me Slower¶
- Yup. This is on purpose.
 - I’m not a superstar developer. You aren’t either. None of us are.
 - Writing tests for everything might make you go slower “in the small” but the organization as a whole will go faster.
 
Don’t Be Afraid To Throw It Away¶
- I use testing as a way to think about code. I write something terrible quickly, then I start to write some tests for it. The act of writing tests reveals how terrible it is, and I throw some of it out, and write something better. Rinse, lather, repeat until code is good.
 - TDD? Not so much me. If it works for you sure.