- code paths
- fuzz testing
- assertions
- match
- mocks
- independent from the environment from where it runs
- don't need to talk to a real database
- don't need to use the actual file system
- test against fake implementations
- coverage
- which code paths were visited
- do we need to write more tests to cover everything