A unit test typically tests some aspect of a class (in OO languages). There is a school of thought that a unit test tests some behaviour across layers but this isn't correct (that is an integration test).

Good unit tests have a number of features - defined by the FIRST acronym.

**Fast**

Unit tests should be fast

**Independent**

It should be possible to run them independently of any dependencies

**Repeatable**

A test should be repeatable with no manual cleardown or set up

**Self-checking**

A test should be able to check its own result automatically

**Timely**

Tests should be written at the same time as the code under test (CUT)