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)