In orice proiect ar trebuii sa existe unit teste. In general, pentru validare, fiecare test poate sa contina Assert-uri de forma:
Assert.IsNotNull(result);
Assert.AreEqual(1,result.Count);
...
In cazul in care este nevoie sa validam o lista, folosim un foreach sau orice mod de a itera o lista:
foreach(var item in result.Items)
{
Assert.IsTrue(baseResult.Contains(item));
}
.NET ne pune la dispoztie pe langa Assert si clasa CollectionAssert, prin intermediul careia putem sa validam o colectie. Mai jos o sa trec peste cateva metode care mi s-au parut mai importante:- CollectionAssert.AreNotNull - verifica ca toate elementele din colectie sa nu fie NULL
- CollectionAssert.AllItemsAreInstancesOfType - verifica daca toate elementele din colectie sunt de un anumit tip( tipul poate sa fie si o interfata)
- CollectionAssert.AllItemsAreUnique - verifica daca toate elementele din colectie sunt diferite( fiecare element din colectie se compara cu restul folosind metoda Equal). Optional se poate specifica un IComparer pentru a se face o comparatie custom.
- CollectionAssert.AreEqual - Verifica daca doua colectii sunt egale( din nou metoda Equal este folosita)
- CollectionAssert.AreEquivalent - Este asemanator cu AreEqual, dar elementele pot sa apara in orice ordine. De exemplu doua colectii o sa fie echivalente daca au acelasi numar de elemente si fiecare element din prima colectie este egal cu un element din a doua colectie.
- CollectionAssert.Contains - verifica daca o colectie contine un anumit element
- CollectionAssert.IsSubsetOf - verifica ca prima colectie este o submultime a celei de a doua colectie
HashSet<string> collectionOne = new HashSet<string>(){"A","B"};
HashSet<string> CollectionTwo = new HashSet<string>(){"B","A"};
CollectionAssert.AreEquivalent(collectionOne, collectionTwo);
Este bine de stiut ca fiecare din aceaste metode are si echivalentul pentru negatie. Pentru mai multe informatii puteti accesa: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.collectionassert%28v=vs.100%29.aspx
Ar fi frumos daca unit testing-ul nu ar mai fi 2nd hand citizen, si MS ar face niste upgrade-uri la el, gen support pentru lamba.
ReplyDeleteUn candidat excepent ar fi chiar partea de collection assert unde uneori ai nevoie sa ai niste reguli de echivalenta "custom".