- Fast: does not talk to a network (those are integration tests), and should verify one specific task quickly
- Independent: unit tests should be totally isolated from other tests and dependencies should be stubbed/mocked so as to only demonstrate/verify the task at hand
- Repeatable: pretty self-explanatory
- Self-Validating: no need to verify anything after a test is run. Tests should themselves assert and give a conclusive pass/fail
- Thorough (or Timely): Thorough because we shouldnât just test the happy path. Timely because tests should be written alongside the new feature implementation itself to help ensure confidence with each push