O unitate
O unitate software | |
---|---|
Tip | cadru de testare unitară |
Dezvoltator | Ed Falis [1] |
Ultima versiune | 3.8 |
Sistem de operare | Multiplatform |
Limba | Ada |
Licență | GPL ( licență gratuită ) |
Site-ul web | libre.adacore.com/tools/aunit/ |
AUnit este un cadru de testare unitară a familiei xUnit pentru limba Ada , dezvoltat inițial de Ed Falis și întreținut de AdaCore , distribuit împreună cu GNAT . [1]
Cadru
AUnit constă dintr-un set de pachete care implementează diferitele componente ale cadrului, a cărui rădăcină este pachetul AUnit
:
-
AUnit
-
Assertions
-
Last_Chanche_Handler
-
Memory
-
Utils
-
-
Options
-
Reporter
-
GNATtest
-
Text
-
XML
-
-
Run
-
Simple_Test_Cases
-
Test_Caller
-
Test_Cases
-
Registration
-
Specific_Test_Case_Registration
-
-
Test_Filters
-
Test_Fixtures
-
Test_Results
-
Test_Suites
-
Tests
-
Time_Measure
-
Cazuri de testare simple
Tipul rezumat etichetat AUnit.Simple_Test_Cases.Test_Case
definește cel mai simplu caz de testare, din care derivă celelalte cazuri de testare din bibliotecă și care poate fi utilizat ca bază pentru tipurile de cazuri de test definite de utilizator. Pentru acest tip sunt definite unele rutine care, prin suprascriere , permit specificarea comportamentului:
funcția Nume ( T : Test_Case ) return Message_String este abstract ;
procedura Run_Test ( T : in out Test_Case ) este abstractă ;
Procedura Set_Up ( T : in out Test_Case );
procedura Tear_Down ( T : in out Test_Case );
Funcția Name
definește numele cazului de testare și procedura Run_Test
conține codul pentru a rula în test, cu orice afirmații definite în pachetul AUnit.Assertions
. Procedurile Set_Up
și Tear_Down
definesc orice acțiuni care trebuie efectuate înainte și după fiecare test, de obicei pentru a configura sau curăța mediul de execuție. [2]
Un exemplu este următorul:
cu AUnit ;
cu AUnit.Simple_Test_Cases ;
pachetul Simple_Test este
tip Test este nou AUnit . Simple_Test_Cases . Test_Case cu înregistrare nulă ;
funcția de suprascriere Nume ( T : Test ) returnează AUnit . Message_String este
( dacă este adevărat atunci AUnit . Format ( "Operațiuni de testare" ) altfel AUnit . Format ( "" ));
procedura de suprascriere Run_Test ( T : in out Test );
end Simple_Test ;
cu AUnit.Assertions ; utilizați AUnit.Assertions ;
corpul pachetului Simple_Test este
procedura Run_Test ( T : in out Test ) este
I , J : Număr întreg : = 1 ;
începe
Afirmați ( I + J = 2 , „Eroare în sumă” );
încheie Run_Test ;
end Simple_Test ;
Cazuri de testare
În plus față de cel mai de bază tip definit în AUnit.Simple_Test_Cases
, cadrul definește tipul abstract AUnit.Test_Cases.Test_Case
, care vă permite să compuneți mai multe rutine într-un caz de testare. Procedura Run_Test
este deja definită și nu trebuie înlocuită, iar pachetul oferă, de asemenea, un tip pentru rutinele de testare și unele proceduri:
tip Test_Routine este procedura de acces (Test: în afara Test_Case "clasa);
procedura Register_Tests ( Test : in out Test_Case ) este abstractă ;
procedure Set_Up_Case ( Test : in out Test_Case );
procedure Tear_Down_Case ( Test : in out Test_Case );
Rutinele de testare individuale, care conțin aserțiunile, trebuie să fie accesibile ca Test_Routine
, iar Register_Tests
procedura vă permite să înregistrați rutine de testare care urmează să fie executate, prin AUnit.Test_Cases.Registration.Register_Routine
procedurii, în timp ce Set_Up_Case
și Tear_Down_Case
rutine sunt executate , respectiv înainte și după întregul caz de testare (adică setul de rutine înregistrate). [2]
Dispozitiv de testare
Tipul abstract AUnit.Test_Fixtures.Test_Fixture
vă permite să definiți fixtures , ale căror variabile sunt câmpurile adăugate prin extinderea înregistrării. Fiecare rutină de testare are propria instanță a dispozitivului, deci nu există riscul ca unele teste să le afecteze pe celelalte prin efecte secundare . De asemenea, pentru corpuri de iluminat este posibil să se definească procedurile Set_Up
și Tear_Down
, efectuate respectiv înainte și după fiecare rutină de testare. Testele pot fi create, de exemplu, într-o suită, începând de la dispozitiv prin instanțierea pachetului generic AUnit.Test_Caller
și invocând funcția Create
. [2]
cu AUnit ;
cu AUnit.Test_Fixtures ;
pachetul Test_Con_Fixture este
tip Test este nou AUnit . Test_Fixtures . Test_Fixture cu înregistrare
I , J : Întreg ;
înregistrare finală ;
procedura de suprascriere Set_Up ( T : in out Test );
procedure Test_Subtrazione ( T : in out Test );
end Test_Con_Fixture ;
cu AUnit.Assertions ; utilizați AUnit.Assertions ;
corpul pachetului Test_Con_Fixture este
procedura Set_Up ( T : in out Test ) este
începe
T. I : = 1 ;
T. J : = 1 ;
end Set_Up ;
procedure Test_Subtrazione ( T : in out Test ) este
începe
Afirmați (T. I - T. J = 0, "Eroare la scădere");
end Test_Subtraction ;
end Test_Con_Fixture ;
Suită
Mai multe cazuri de testare pot fi combinate într-o singură suită de testare, utilizând tipurile definite în AUnit.Test_Suites
. O suită constă dintr-un pachet care conține o funcție Suite
, care returnează un acces la un obiect de tip Test_Suite
, la care au fost adăugate cazurile de testare care trebuie executate. Testele pot fi alocate static sau dinamic în corpul pachetului și sunt adăugate în suită prin procedura Add_Test
. [2] Suitele și testele sunt implementate cu modelul compozit , deoarece au un tip de bază în comun; deoarece procedura Add_Test
acceptă ca parametru un argument de tip Test_Suite'Class
pentru elementul care trebuie adăugat, este de asemenea posibil să combinați mai multe suite adăugând una la cealaltă. [3]
De exemplu, pentru a crea o suită care efectuează cele două teste definite în exemplele anterioare (rețineți că, în timp ce primul este alocat static, al doilea, bazat pe un dispozitiv fix, este creat cu funcția AUnit.Test_Caller.Create
):
cu AUnit.Test_Suites ; utilizați AUnit.Test_Suites ;
pachetul Test_Suite este
function Suite return Access_Test_Suite ;
end Test_Suite ;
cu Simple_Test ;
cu Test_Con_Fixture ;
cu AUnit.Test_Caller ;
corpul pachetului Test_Suite este
pachet Apelant este nou AUnit.Test_Caller ( Test_Con_Fixture.Test );
T : aliased Simple_Test . Test ;
function Suite return Return_Test_Suite este
S : constant Access_Test_Suite : = new Test_Suite ;
începe
S. Add_Test ( T ' Access );
S. Add_Test ( Caller . Create ( "Test scăderea" , Test_Con_Fixture . Test_Subtraction ' Access ));
retur S ;
end Suite ;
end Test_Suite ;
Reporter
O suită poate fi rulată printr-un reporter, care efectuează diferitele teste conținute și generează un raport. Cadrul oferă două tipuri implicite pentru reporter care generează o singură ieșire la sfârșitul executării tuturor testelor; una ( AUnit.Reporter.Text.Text_Reporter
) returnează o ieșire în text simplu și poate fi utilizată pe linia de comandă, în timp ce cealaltă ( AUnit.Reporter.XML.XML_Reporter
) returnează o ieșire în XML , utilă pentru generarea fișierelor de raport sau includerea rularea testelor unitare într-un mediu de dezvoltare integrat. [2] Versiunea AUnit distribuită cu GNAT conține și reporterul AUnit.Reporter.GNATtest.GNATtest_Reporter
, utilizat pentru testele generate automat cu instrumentul GNATtest, inclus de exemplu în mediul GNAT Programming Studio . [4]
Un exemplu de program pentru rularea suitei definit în exemplul anterior, generând un raport de linie de comandă în text simplu:
cu Test_Suite ;
cu AUnit.Run ;
cu AUnit.Reporter.Text ;
procedura Execute_Test este
procedura Executare este nouă AUnit . Aleargă . Test_Runner ( Test_Suite . Suite );
Reporter : AUnit . Reporter . Text . Text_Reporter ;
începe
Reporter . Set_Use_ANSI_Colors ( True ); - utilizați culori în ieșirea din linia de comandă
Run ( Reporter );
încheie Run_Test ;
Notă
- ^ a b AUnit , la libre.adacore.com , AdaCore.
- ^ a b c d și AUnit Cookbook , pe docs.adacore.com , AdaCore, 8 august 2015 (arhivat din original la 30 august 2015) .
- ^ Comentarii la codul sursă al fișierului
aunit-test.ads
din cadrul AUnit distribuit cu GNAT GPL Edition. - ^ Comentarii la codul sursă al fișierului
aunit-reporter-gnattest.ads
din cadrul AUnit distribuit cu GNAT GPL Edition.
linkuri externe
- AUnit Cookbook , pe docs.adacore.com , AdaCore, 8 august 2015 (arhivat din original la 30 august 2015) .