Documente Academic
Documente Profesional
Documente Cultură
Unit Testing With Python
Unit Testing With Python
Grupa 452
Cuprins
BlackBox vs WhiteBox ……………………………………………………..3
Unit testing …………………………………………..………………………4
Unit testing in Python ……………………………………..………………..6
Mock in Unit Testing ………………………………………………………..13
Branch Testing …………………………………………………………….15
Mutation Testing …………………………………………………………….16
2
În testarea de tip black box, utilizatorul nu are informații despre funcționarea internă a
sistemului software. Este considerată testare la nivel ridicat care se concentrează pe
comportamentul software-ului. Implică testarea dintr-o perspectivă externă sau a
utilizatorului final. Testarea black box poate fi aplicată la aproape toate nivelurile de
testare software: unit, integration, system, application.
Testarea de tip white box este o tehnică de testare care verifică funcționarea internă a
sistemului. În această metodă, testarea se bazează pe acoperirea declarațiilor de cod,
ramuri, căi sau condiții. Este considerată testare la nivel scăzut. Se mai numește cutie
de sticlă, cutie transparentă, cutie limpede sau testare de bază a codului. Metoda de
testare white box presupune că este cunoscută calea logicii într-o unitate sau program.
Diferente cheie
3
Unit testing
Unit testing-ul este un tip de testare software în care sunt testate unități individuale
sau componente ale unui software. Scopul este de a valida dacă fiecare unitate a
codului software funcționează așa cum este de așteptat. Testarea unității se face în
timpul dezvoltării (faza de codare) a unei aplicații de către dezvoltatori. Testele unității
izolează o secțiune de cod și verifică corectitudinea acestuia. O unitate poate fi o
funcție, metodă, procedură, modul sau obiect individual.
Unit testing-ul este primul nivel de testare efectuat înainte de testarea integrării. Unit
testing-ul este o tehnică de testare WhiteBox care este de obicei realizată de
dezvoltator. Deși, într-o lume practică datorată creșterii timpului sau reticenței
dezvoltatorilor la teste, inginerii de la QA fac și testarea unității.
4
Uneori, dezvoltatorii de software încearcă să economisească timp prin testarea unității
minime. Acesta este un mit, deoarece sărirea la testarea unității duce la costuri mai
mari de fixare a defectelor în timpul testării sistemului, testării integrării și chiar testării
beta după terminarea aplicației. Testarea corectă a unității, efectuată în timpul
dezvoltării, economisește timp și bani în final. Iată motivele cheie pentru efectuarea unit
testing-ului.
Unittest unit testing framework a fost inițial inspirat de JUnit și are un caracter similar cu
marile cadre de testare a unităților în alte limbi. Sprijină automatizarea testelor,
distribuirea codului de configurare și oprire pentru teste, agregarea testelor în colecții și
independența testelor de cadrul de raportare.
6
Cazuri de testare:
Clasa TestCase oferă mai multe metode de afirmare pentru a verifica și raporta
eșecurile. Următorul tabel prezintă cele mai utilizate metode:
7
8
● In fisierul test_calc.py am scris testele si am folosit următoarele metode :
9
-> assertTupleEqual() - Testeaza daca 2 tupluri sunt egale. Dacă nu, se creează un
mesaj de eroare care arată doar diferențele dintre cele două. O eroare este de
asemenea ridicată dacă oricare dintre parametrii sunt de tip greșit.
-> assertListEqual() - Testează dacă 2 liste sunt egale. Dacă nu, se creează un mesaj
de eroare care arată doar diferențele dintre cele două. O eroare este de asemenea
ridicată dacă oricare dintre parametrii sunt de tip greșit.
-> assertEqual() - Testează dacă primul și al doilea sunt egali. Dacă valorile nu sunt
egale, testul va eșua.
-> assertTrue()/assertFalse() - Verifica dacă valoarea returnată de funcție este True sau
False
10
-> Sortare :
-> Mod :
-> Div :
Întotdeauna metodele trebuie sa fie definite corect. Dacă funcția nu este definită cum
trebuie automat testul va pica.
11
-> Aici avem definită funcția :
-> Cand vom rula, vom observa ca testul va pica deoarece funcția nu este definită bine :
Mock Testing
Mock testing este o abordare a unit testing-ului care ne permite sa facem afirmații
despre cum interacționează codul testat cu alte module de sistem. Dependențele sunt
înlocuite cu obiecte care simulează comportamentul celor reale. Scopul mock testing-
12
ului este să izoleze și să se concentreze pe codul testat, ci nu pe comportamentul sau
starea dependențelor externe.
Exemplu pe o funcție simpla de adaugare a unei valori la aruncarea unui zar. Folosită
pentru jocurile de tip DnD. Se arunca un zar apoi se adaugă un modifier la valoarea
zarului. Din moment ce nu putem ști ce valoare va avea zarul avem nevoie de un mock
pentru a testa funcția.
Facem un mock în care randint din fișierul diceroll va avea valoare 5 pentru a putea
testa și adăugăm autospec = True pentru a ne asigura că folosește numărul corect de
argumente.
13
Branch Testing
În mod ideal, am dori să avem o acoperire de 100%, dar orice creștere este una bună.
S-ar putea să existe un cod specific platformei care pur și simplu nu va executa pentru
dvs., erori la ieșire, etc. La măsurarea ramurilor, cover.py colectează perechi de numere
de linie, o sursă și o destinație pentru fiecare tranziție de la o linie la alta. Analiza statică
a sursei oferă o listă de tranziții posibile. Compararea măsurată cu cea posibilă indică
ramuri lipsă.
14
Mutation Testing (Testarea Mutanților)
O mutație reprezintă o mica modificare la nivelul codului (de exemplu schimbarea unui
operator).
15
Pentru a instala tool-ul mutpy folosim următoarea comanda
16
Concluzie: Testul a generat 13 mutanti dintre care:
17
Testul a generat urmatorul output:
18
Concluzie: Testul a generat 13 mutanti dintre care:
● Omorati: 8 mutanti (M4, M5, M6, M7, M8, M9, M12, M13)
● Supravietuitori: 5 mutanti (M1, M2, M3, M10, M11)
Pentru a omora toti mutantii am scris un test pentru un termen mai mare
19
Următorul caz prezintă un test eșuat
Modificăm testul astfel incat termenul 5 din șirul lui Fibonacci să fie 4
Testul a eșuat deoarece termenul 5 din șirul lui Fibonacci este 5, nu 4 (cum am scris în
test)
20