- semplice;
- atomico;
- veloce;
- consistente;
Semplice:
deve essere composto da poche righe, non deve contenere logica.
Atomico:
non deve dipendere da altri test, non deve dipendere dall'ordine di
esecuzione, deve verificare solo un concetto per volta.
Veloce:
il tempo di esecuzione si deve aggirare intorno al secondo, quando la
batteria di test inizierà ad avere un numero considerevole di
elementi sarà molto importante che i vostri test abbiano un tempo di
esecuzione molto breve.
Consistente:
tutte le volte che viene eseguito deve restituire lo stesso
risultato.
Esempi
di test che non rispettano le regole prima citate:
[Test]
public
void
Test()
{
if
(_sut.DoSomething(DateTime.Now))
{
Assert.AreEqual(10,
_sut.ReturnResult());
}
else
{
Assert.AreEqual(9,
_sut.ReturnResult());
}
}
Cosa
abbiamo violato:
- il test contiene logica;
- il test puó dare risultati diversi;
[Test]
public
void
Test()
{
_sut.DoSomething();
Assert.AreEqual(10,
_sut.Filed1);
Assert.AreEqual(12,
_sut.Filed2);
_sut.DoSomething2();
Assert.AreEqual(12,
_sut.Filed1);
}
Cosa
abbiamo violato:
- il test verifica piú condizioni
- il test verifica piú comportamenti
[Test]
public
void
Test1()
{
_field1
= 10;
//
implementazione del test
}
[Test]
public
void
Test2()
{
_sut.DoSomething();
Assert.AreEqual(_field1,
_sut.Filed1);
}
Cosa
abbiamo violato:
- il test2 dipende dal test1;
- il test può dare risultati diversi;
[Test]
public
void
Test()
{
for
(int
i = 1; i < 10; i++)
{
_sut.LoadDataFromDatabase(i);
Assert.AreEqual(10,
_sut.Filed1);
}
}
Cosa
abbiamo violato:
- il test verifica più condizioni;
- il test risulterà lento perché si connette ad un database esterno;
- il test potrebbe fallire se il database non é raggiungibile;
- il test potrebbe dare risultati diversi se i dati sono stati modificati nel database;