În acest articol, ne propunem să utilizeze unitate de testare încorporată oferite de Visual Studio, deși alte pachete disponibile și unitate de testare .NET. Cel mai popular dintre acestea este, probabil, NUnit. Cu toate acestea, toate pachetele de testare a face practic același lucru. Motivul pentru selectarea instrumentelor de testare Visual Studio asociate cu atractivitatea de integrare cu alte părți ale IDE-mediu.
Pentru a lucra cu unitatea de testare încorporată în proiectul Visual Studio probă (pe care am început să se dezvolte în articolul precedent), a fost adăugată o nouă interfață de implementare IDiscountHelper. Crearea unui dosar nou fișier Modele MinimumDiscountHelper.cs numit cu conținutul dat în exemplul de mai jos:
Scopul nostru în acest exemplu - face clasa MinimumDiscountHelper pentru a demonstra următoarele aspecte ale comportamentului:
în cazul în care suma totală mai mult de 100 $, o reducere va fi de 10%;
în cazul în care suma totală este cuprinsă în intervalul între 10 $ și 100 $, inclusiv, reducerea va fi de 5 $;
pentru o sumă totală care nu depășește 10 $, o reducere nu este disponibilă;
pentru o sumă totală negativă va fi aruncat ArgumentOutOfRangeException.
Clasa MinimumDiscountHelper încă nu pune în aplicare un singur unul dintre aceste aspecte ale comportamentului. Vom urmări abordarea de dezvoltare condusă de testare (Test Driven Development - TDD). în primul rând scris teste de unitate, și numai apoi să pună în aplicare codul.
Crearea unui proiect de unitate de testare
Primul pas este de a crea un proiect de testare unitate, care, în fereastra Solution Explorer, faceți clic dreapta pe elementul de nivel superior (Solution (Soluție)) și selectați Adăugare din meniul contextual -> New Project (Add -> New Project).
Necesitatea unui proiect de testare, puteți specifica, de asemenea, atunci când creați un nou proiect MVC: o casetă de dialog în care puteți selecta conținutul inițial pentru proiectul MVC. În acest scop, o verificare Adaugă Unit Testelor (Adăugați teste unitare).
Deschideți Adăugare caseta de dialog New Project (Adăugarea unui nou proiect). În Visual C # șabloanele din panoul din stânga, selectați elementul de testare (testare) și asigurați-vă că în panoul din mijloc este selectat Unitatea de proiect de testare (proiect test de unitate), după cum se arată mai jos:
EssentialTools.Tests Se specifică numele proiectului și faceți clic pe OK pentru a crea un nou proiect, care va fi adăugat la curent soluția de Visual Studio, împreună cu proiectul de aplicare MVC.
Testarea proiectului trebuie să ofere un link către un proiect de aplicație pentru a avea acces la cursuri pentru a efectua în raport cu acestea teste. În Solution Explorer, faceți clic dreapta pe EssentialTools.Tests elementelor Referințe pentru proiect și selectați Add Reference din meniul contextual (add link). Dați clic pe elementul Soluție (decizie) în panoul din stânga și selectați caseta de selectare de lângă EssentialTools:
Crearea Teste unitate
Pentru a începe edita ilustrat în exemplul de mai jos:
A fost adăugat un singur test unitate. O clasa care contine teste adnotate atribut TestClass. iar testele individuale sunt metode adnotate atribut TestMethod. Nu toate metodele din clasa de testare trebuie să aibă teste unitare. Pentru a demonstra cele de mai sus, am identificat metoda getTestObject (), care va fi utilizat pentru testele. Deoarece această metodă nu TestMethod atribut, mediul Visual Studio nu-l va trata ca pe un test de unitate.
Notă adăugarea folosind declarații pentru a importa nume EssentialTools.Models spațiu în clasa de test. Clasele de test - este doar o regulat C # clase care sunt complet conștienți de proiectul MVC. Întreaga „magic“ al proiectului de testare și de a oferi atribute TestClass TestMethod.
După cum puteți vedea, atunci când creați un test de unitate de această metodă, am urmat modelul de „organizație / acțiune / declarație“ (aranja / act / assert - A / A / A). care a fost descris în articolul „Testarea automată“.
Există multe convenții de denumire pentru teste unitare, dar am să adere la scopul principiul unui astfel de nume care reflectă în mod clar faptul că testul este verificat. Metoda noastră este testul de unitate numit Discount_Above_100 () (reducere pentru suma de mai sus 100 $) și arată în mod clar pentru noi. Cu toate acestea, în realitate, este doar că pentru tine (si echipa ta) să înțeleagă modelul de denumire a adoptat importante, astfel încât să puteți alege o abordare diferită în cazul în care acest lucru nu este îndeplinită.
La începutul metodei de testare noi numim getTestObject () metodă care creează o instanță a unui obiect destinat testării - în acest caz MinimumDiscountHelper. În plus, definim valoarea totală pentru care vor fi efectuate teste. Această secțiune a testului unitate a organizației.
În secțiunea de testare, vom apela metoda de acțiune MinimumDiscountHelper.ApplyDiscount (), și atribui rezultatul să fie returnate pentru a le discountedTotal. În final, secțiunea Assert.AreEqual () metoda, folosim instrucțiunea de testare a verifica dacă valoarea derivată din ApplyDiscount metoda (), este de 90% din suma totală menționată la început.
Clasa Assert definește un set de metode statice care pot fi utilizate în teste. Această clasă este în Microsoft.VisualStudio.TestTools.UnitTesting spațiu de nume, împreună cu un număr de clase suplimentare care sunt utile pentru configurarea și rularea testelor.
Afirmați clasa este una dintre cele mai utilizate frecvent, deci este metode importante sunt rezumate în tabelul de mai jos:
Metode statice Afirmați clasa
El susține că obiectul nu este de tipul specificat
Fiecare metodă statică în clasa Assert vă permite să verificați un anumit aspect al unui test de unitate, iar în cazul în care verificarea nu trece, aceste metode de a arunca o excepție. Pentru a testa unitatea de trecut, toate declarațiile trebuie să fie completate cu succes.
Fiecare metodă de tabel este supraîncărcată versiune care are un șir de parametri. În cazul unor situații negative, această linie este plasat în elementul de mesaj în obiectul excepție. Metode și AreEqual AreNotEqual au mai multe versiuni supraîncărcate destinate compararea tipurilor specifice. De exemplu, există o versiune care vă permite să comparați linia-insensibil.
Un membru notabil al numelui Microsoft.VisualStudio.TestTools.UnitTesting spațiul este atributul ExpectedException. Această afirmație, care dă un rezultat pozitiv numai în cazul în care un test de unitate aruncă o excepție cu tipul specificat în parametrul ExceptionType. Acest atribut este un mod de încredere pentru a asigura generarea de excepții, fără a fi nevoie de un blocuri de încercare. captură în codul de testare unitate.
Acum, că sa demonstrat modul de a crea un test de unitate pentru a testa proiectul, puteți adăuga teste suplimentare sunt destinate să verifice alte aspecte ale comportamentului MinimumDiscountHelper clasa. Toate contribuțiile sunt prezentate în exemplul de mai jos, dar testele unitare sunt atât de scurte și simple (în general, aceasta este o trăsătură caracteristică a testelor unitare) că o explicație detaliată pentru ele nu vor fi conduse de:
Pasajul (nu trece) teste unitare
Visual Studio IDE oferă fereastra Test Explorer (test de conductor). destinate pentru gestionarea și executarea testelor. Selectați Windows -> Testare Explorer în meniul Test de mediu Visual Studio, pentru a deschide fereastra, apoi pe Executare Toate (Start toate), în colțul din stânga sus. Veți vedea rezultate similare cu cele prezentate în figura de mai jos:
Funcționalitatea
Acum, că știți că, la sfârșitul scrierii codului poate verifica activitatea sa, putem începe să pună în aplicare funcționalitatea necesară. Pentru toate pregătirile făcute MinimumDiscountHelper implementarea clasei este destul de simplu și este prezentat în exemplul de mai jos:
Testarea și corectarea codului
Visual Studio încearcă să efectueze întotdeauna cele mai utile informații din partea de sus a ferestrei de test Explorer. În această situație, aceasta înseamnă că testele care nu au fost afișate înainte de a trecut testul.
Figura arată că au trecut cele trei teste de unitate, dar există o problemă detectată de Discount_Between_10_And_100 metoda de testare. Dacă faceți clic pe acest test, puteți afla ce este de așteptat ca testul să primească rezultatul 5, în timp ce valoarea de 10 a fost obținută în realitate.
În acest moment, ne întoarcem la codul și a vedea ce comportamentul așteptat nu a fost pus în aplicare în mod corespunzător - în special, reducerea pentru cantitățile totale de 10 sau 100, sunt prelucrate incorect. Problema constă în următoarea declarație din MinimumDiscountHelper clasă:
Caiet de sarcini, cu care ne confruntăm, stabilește comportamentul de valori de la între 10 $ și 100 $, inclusiv, dar punerea în aplicare nostru elimină aceste valori și verifică doar valoarea care este mai mare de 10 $, care nu ia în considerare valoarea totală exact egală cu 10 $. Solutia este destul de simplu și este prezentat în exemplul de mai jos - pentru a modifica acțiunea operatorului în cazul în care rezultatul va trebui să adăugați doar un singur simbol:
Când faceți clic pe Executare Tot în fereastra de testare Explorer, rezultatele arată că problema este rezolvată, iar toate testele sunt de succes pe codul: