Unitatea de testare în Visual Studio folosind NUnit și nsubstitute
P.S. Deja în procesul de scriere pentru a vedea că el este lăsat pe traducerea în limba română a acestei cărți. Test de Driven Development pentru iOS. și are atât o versiune electronică și o hârtie. Eu însumi nu am citit-o, astfel încât calitatea traducerii nu poate estima Arta de unitate de testare - o carte bună pentru a înțelege elementele de bază ale subiectului. Dar, în opinia mea, este lipsită de exemple practice. Cu toate acestea foarte recomanda să înceapă cu ea. Apoi, să ia o clasă simplă, care dependențe externe speciale, și să încerce să acopere testele. În mod ideal, încercați să imediat TDD (Test Drive Development). Am făcut acest lucru, pentru prima clasa necesară pentru mine, am scris mai întâi testele, și numai apoi scris codul. Ceea ce mi-a lovit - datorită testelor - chiar și înainte de integrarea noii clase în sistem real, - aproape toate neajunsurile au fost capturate. La proiectarea o astfel de clasa a doua într-o perioadă limitată de timp (ca întotdeauna), arrogantly am decis că testele nu mai pot scrie. Ca rezultat, am primit câteva bug-uri nu foarte placute, a petrecut mai mult timp decât în cazul în care testele de scriere imediat. Și apoi m-am decis să iau în serios teste.
pentru că Această carte este scrisă în mod esențial pentru C # programatori, tocmai pentru că a fost urmată de o alegere de biblioteci NUnit, NSubstitute. la fel a fost lăsat neschimbat sistemul de numire.
munca efectivă cu cod moștenire - o carte mai gravă în ceea ce privește volumul și alimentarea de material mai greu de-al doilea. Și plus și minus că, în diferența dintre exemplele anterioare discutate aici pentru mai multe limbi: Java, C ++, C. Eu vă sfătuiesc să citiți amintirile.Deci, poate că va începe. O să-ți spun cum să configurați Visual Studio pentru a scrie teste, așa cum sunt 3 exemple. Primul - în acest articol este simplu și născocită pentru a da baza. În a doua parte ar fi un exemplu relativ simplu, amintiți-vă modul în care testele prevăzute pentru prima dată. În a treia parte a articolului este un exemplu de mai complicată și mi-a va scrie cod paralel. Pentru a face clar faptul că nu zeii arde ghivece.
În primul rând trebuie să instalați NUnit. dar, pentru a începe este setat în VisualStudio - NuGet. Această extensie vă permite să instalați pachete într-o singură comandă de la consolă.
Deschideți Visual Studio. și selectați Instrumente | Extensiile și actualizări (a fost anterior Extension Manager)
Puteți instala, de asemenea, adaptorul de testare NUnit - teste de integrare a alerga la studio (deși eu folosesc Resharper așa că nu vreau în mod special.)
În timp ce eu nu recomand instalarea Unitate de testare Generator. Am citit despre problema într-un comentariu, dar nu acorde atenție. După instalare - încetează să lucreze de tranziție în implementarea clasei / metoda pentru Ctrl + clic. Problema a dispărut imediat după îndepărtarea unui dop.
Deci, acum avem NuGet. dar avem nevoie de NUnit (voi folosi acest cadru în loc de built-in Visual Studio), împreună cu NSubstitute.
Vom crea un proiect consolă de testare și denumiți-o SampleProject. Am stabilit marca împotriva directorul Creare pentru soluție. în dosarul cu testele pentru proiect nu a fost investit în proiect în sine, și a fost la același nivel.
Acum, creați un proiect care conține teste unitare pentru proiectul nostru
Prevede numele proiectului
Observați că în Locație am urcat la un nivel superior, care a fost recomandat inițial pentru mine pentru a crea o unitate de teste de proiect intr-un folder cu proiectul.
Așa cum am scris mai sus, convenția nume va fi luat din cartea Arta de unitate de testare. Pentru a numi teste de proiect este următoarea - <Тестируемый проект>.UnitTests. Astfel, am un proiect cu testele vor fi numite SampleProject.UnitTests
După crearea proiectului SampleProject.UnitTests - deschide un fișier creat UntTest1.cs
După cum vom vedea acum folosește un cadru de testare VisualStudio construit. Acest lucru poate fi înțeles prin atribute - clasa [Test]. în metoda [TestMetod]. Dorim să folosim NUnit care în loc de alte atribute [TestFixture] și [Test] respectiv. Să încercăm să se schimbe, dar ele sunt subliniate în roșu, pentru că până la VisualStudio despre ei nu știe nimic.
Deschideți consola NuGet
Și să câștige comanda
Instalați-Pachet NUnit
și apoi
Instalați-Pachet NSubstitute
IMPORTANT: Nu uitați să alegeți proiectul implicit ca proiectul cu teste unitare și nu cu programul. În caz contrar, biblioteca va fi setat la proiect greșit.
Adăugați la UnitTest1 -
folosind NUnit.Framework;
și vom vedea că compilatorul înțelege acum atributele noastre, folosind vechi pot fi eliminate (folosind Microsoft.VisualStudio.TestTools.UnitTesting)
Sper ca ai citit cartea Arta de unitate de testare, sau pur și simplu nu au nici o idee cum să lucreze în linii mari cu NUnit. deoarece profund bază nu intenționează să explice un pic formatul de articol.
Dacă suntem foarte scurt - principalul lucru într-un test de unitate - este o declarație cu privire la adevărul ipoteza (Assert).
Va crea în principal dosarul proiectului SampleProject Utilites și de a crea acolo interfață IAccount (director este creat pentru separarea vizuală a claselor și nu este necesar)
Initial am numit metoda GetAccountId_InititalizedObject_ReturnCorrectId. apoi redenumit
GetAccountId_WasInitializedWithId_ReturnSameId
Începem crearea contului de cod
cont Cont nou Cont = ();
și a vedea greșeala, testele noastre unitate de proiect nu știu încă despre proiectul de testare
bine, este necesar să se adauge o trimitere la SampleProject originală. Conversație apel
Și ne-am alege proiectul nostru
După aceea, se adaugă AccountTests de clasă folosind SampleProject.Utilites; și începe să compileze codul
atasaza codul, ar trebui să obțineți ceva de genul asta
Am rula testul (am rulat cu ajutorul runner'a Resharper. Dar există o soluție gratuită, același adaptor NUnit test. Care rulează ca acest lucru :)
și vom vedea că trece
Ce este testul? Creăm cont de obiect. inițializarea ID-ul său. și apoi comanda Assert.AreEqual (account.GetAccountId (), initId); Verificăm că GetAccountId () metoda returnează aceeași valoare care a fost la inițializare.
Dacă doriți să vedeți cum nu trece testul, schimba linia pentru a verifica
Assert.AreEqual (account.GetAccountId (), 0);
oricare
Assert.AreNotEqual (account.GetAccountId (), initId);
În activitatea generală, deși prea simplu și mult exagerată. Eu întreb un pic de răbdare.
Să ne ocupăm de asta, ce pe NSubstitute
Cea mai grea parte este, probabil, în unitatea de testare „e - este de a lucra cu obiecte care nu sunt testate. Imaginați-vă că în metoda GetAccountId () pentru a efectua de fapt, sute de linii de cod, a făcut apel la rețea pentru a accesa baza de date, și alte chestii de genul asta. Nu este perspectiva cea mai veselă dintre lugging totul în UnitTest'ah. să fie ușor și rapid, astfel încât, în mod ideal, cel puțin la fiecare compilare a rula lor și asigurați-vă că acest cod nu este rupt, astfel cum a fost modificată. O referire la un sistem de fișiere de rețea -
a) necesită configurație
b) poate ocupa un timp considerabil
c) sunt, în esență teste de integrare, care sunt de asemenea importante, dar acum nu este vorba despre ele.
Care este soluția - desigur, minciună și să înlocuiască tot ceea ce se află dincolo de controlul nostru) Creați un fals. Prost. obiecte stub. Obiectele care implementeaza interfata, dar, de fapt, ceea ce li se spune.