A unit test is:
Repeatable: You can rerun the same test as many times as you want.
Consistent: Every time you run it, you get the same result. (for
example: Using threads can produce an inconsistent result)
In Memory:
It has no "hard" dependencies on anything not in memory (such as file
system, databases, network)
Fast: It should take less than half a
second to run a unit test.
Checking one single concern or "use case" in the system: (More than one can make it harder to understand what or
where the problem is when the problem arises.)
By breaking any of
these guidelines, you increase the chance of developers either not
trusting or not believing the test results (due to repeated false
failures by the tests), or people not wanting to run the tests at all
because they run too slowly.
link
Un'altra cosa che non è menzionata sopra è che non dovrebbe fare affidamento su alcuna configurazione speciale. Qualche sviluppatore può controllare una copia del codice sorgente ed eseguire i test unitari?
Con un database si richiede ad ogni sviluppatore di avere la stessa configurazione di configurazione del database. Cosa succede se alcuni sviluppatori non lavorano normalmente con il database?