CUühik C-s

Cuuhik C S



C-vormingus ühikutestimise teostamiseks kasutatakse süsteemi CUnit, mis võimaldab teste administreerida ja läbi viia. See hõlmab mitmesuguseid väiteid sageli kasutatavate andmetüüpide testimiseks ja kasutab teststruktuuride loomiseks lihtsat arhitektuuri. Kasutaja testimiskood on lingitud CUnitiga, mis on loodud staatilise raamatukoguna. Võime uurida C-programmi ülesannete ja funktsioonide toimivust, kasutades CUniti testiraamistikku. C-programmi igal konkreetsel ülesandel on erinevad sisendtingimused ja väljundpiirangud. CUniti kasutamiseks C-programmi testimiseks peaksime selle esmalt oma süsteemi installima. CUniti installimise sammud on kirjeldatud allpool.

Kuidas kasutada CUniti raamistikku Ubuntu versioonis 22.04

CUniti testimisraamistiku kasutamiseks meie süsteemis peame järgima installimisetappe. Need sammud kehtivad Ubuntu 22.04 süsteemi kohta. Enne installimist värskendasime esmalt oma süsteemi. Käsuga apt värskendamiseks vajas süsteem sudo privileege.








Sudo õiguste saamiseks küsis terminal sudo kasutajalt autentimist. Seejärel värskendage süsteemipakette ja nende sõltuvusi, nagu allpool näidatud.




Nüüd oleme installinud CUniti raamistiku, kasutades järgmist käsku. Selle käsuga saab installida pakette libcunitl, libcunitl-doc ja libcunitl-dev pakettide hoidlast.




Kui CUniti installikäsk on täidetud, on vaja kasutaja parooli. CUniti olulised paketid on installitud meie Ubuntu 22.04-sse.





Näide 1

Lõpetasime eelmises jaotises CUniti raamistiku installietapi. Nüüd oleme testinud summa ja erinevuse meetodit, et näha järgmises näites oodatavaid tulemusi, kasutades CUniti testimisraamistikku.



#include
#include
#include
#include
#include 'CUnit/Basic.h'

int init_suite ( tühine ) { tagasi 0 ; }
int clean_suite ( tühine ) { tagasi 0 ; }

int MySum ( sa oled a1, sa oled b1 )

{
int res1;
res1 =a1+b1;
tagasi res1;
}

int MyDiff ( int a2, int b2 )

{
int res2;
res2 =a2-b2;
tagasi res2;
}

tühine test_MySum ( tühine )
{
WITH_ASSERT ( 4 ==MinuSumma ( kaks , kaks ) ) ;
WITH_ASSERT ( 8 ==MinuSumma ( 5 , 3 ) ) ;
WITH_ASSERT ( kaks ==MinuSumma ( - kaks , 4 ) ) ;
WITH_ASSERT ( 7 ==MinuSumma ( 0 , 7 ) ) ;
}


tühine test_MyDiff ( tühine )
{
WITH_ASSERT ( 3 ==Minu erinevus ( 5 , kaks ) ) ;
WITH_ASSERT ( - 4 ==Minu erinevus ( 4 , 8 ) ) ;
WITH_ASSERT ( - 7 ==Minu erinevus ( - 3 , 4 ) ) ;
WITH_ASSERT ( - 9 ==Minu erinevus ( 0 , 9 ) ) ;
}


int main ( tühine )
{

CU_pSuite pSuite1,pSuite2 = NULL;

kui ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
tagasi CU_get_error ( ) ;

pSuite1 = CU_add_suite ( 'Test Suite1' , init_suite, clean_suite ) ;
kui ( NULL == pSuite1 ) {
CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}

kui ( ( NULL == CU_lisa_test ( pSuite1, ' \n \n Summafunktsiooni testimine \n \n ' , test_MySum ) ) )
{
CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}

kui ( ( NULL == CU_lisa_test ( pSuite1, ' \n \n Erinevusfunktsiooni testimine \n \n ' , test_MyDiff ) ) )
{
CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}

CU_basic_run_tests ( ) ;

CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}







Esiteks oleme CUniti struktuuri loomiseks lisanud CUniti teegi “CUnit/Basic.h” koos lisatud märksõnaga. See C-teek on mõeldud üksuste testimise raamistike jaoks ja pakub lihtsat konsooli väljundliidest. Seejärel lisasime oma testimisprogrammi kaks funktsiooni, 'init_suite' komplekti funktsiooni lähtestamiseks ja 'clean_suite' komplekti funktsiooni puhastamiseks.

Järgmisena koostasime meetodid 'MySum' ja 'MyDiff', mida CUnit testib. Oleme nende funktsioonide jaoks kutsunud konstruktori, mis sisaldab muutujaid, mille kohta on tehtud summa- ja vahetehteid. Järgmiseks oleme testimiseks loonud funktsiooni 'test_MySum'. Funktsiooni sees oleme kasutanud meetodit 'CU_ASSERT', kus on määratud summa init-avaldised. Sarnaselt 'test_MySum'-ga oleme loonud funktsiooni test_MyDiff, et testida avaldist erinevate toimingute jaoks, kasutades meetodit 'CU_ASSERT'.

Seejärel on meil põhimeetodi sees CUniti käitaja kood. Siin oleme loonud kaks komplekti, 'pSuite1' ja 'pSuite2' meetodist 'CU_pSuite' ja määrasime neile komplektidele NULL väärtuse. Oleme loonud need komplektid CUniti testi läbiviimiseks, mis tuleks registreerida testiregistris. Enne komplektide lisamist test_registrisse lõime registri ja lähtestasime selle tingimusega kui. Oleme kasutanud komplektide testimiseks kasutatava registri loomiseks meetodit 'CU_initialze_registry()'.

Pärast seda lisasime pSuite1 testregistrisse, käivitades CUniti meetodi „CU_add_suite”. Pärast seda lisasime oma testid 'test_MySum' ja 'test_MyDiff' määratud komplektidele, kasutades meetodit 'CU_add_test()'. Lõpuks kuvasime CUniti testi tulemused, kutsudes välja meetodi „CU_basic_run_tests()” ja puhastasime registri pärast tulemuste edukat kuvamist. CUniti testide tegemisel ilmnenud tõrke annab funktsioon „CU_get_error()”.

Eelmine CUniti testfail salvestatakse failina mytest.c. Oleme selle C-faili käivitanud käsuga GCC. Oleme CUniti testfaili täitmiseks kasutanud lippu -lcunit. Selle käsuga kompileeritakse meie kood. Seejärel käivitasime faili mytest ja see näitas CUniti testi oodatud tulemusi, kuna kõik testid läbiti ilma tõrgeteta.

Näide 2

Meil on veel üks näide, kus oleme testinud kahte failitöötlusmeetodit, 'fread' ja 'fprintf', CUniti lähenemisviisi abil. Avasime ja sulgesime ajutise faili, kasutades CUniti testfunktsioone. CUniti testtoimingud testivad teegi funktsioone, kirjutades ja lugedes ajutisest failist.

#include
#include
#include
#include
#include 'CUnit/Basic.h'

staatiline FAIL * faili = NULL;
int init_suite1 ( tühine )
{
kui ( NULL == ( faili = fopen ( 'Minu fail.txt' , 'w +' ) ) ) {
tagasi -1 ;
}
muidu {
tagasi 0 ;
}
}

int puhas_komplekt1 ( tühine )
{
kui ( 0 ! = fsulge ( faili ) ) {
tagasi -1 ;
}
muidu {
faili = NULL;
tagasi 0 ;
}
}


tühine test_fprintf ( tühine )
{
int x1 = 10 ;

kui ( NULL ! = faili ) {
WITH_ASSERT ( kaks == fprintf ( faili , 'K \n ' ) ) ;
WITH_ASSERT ( 7 == fprintf ( faili , 'x1 = %d' , x1 ) ) ;
}
}

tühine test_fread ( tühine )
{
unsigned char puhver [ kakskümmend ] ;

kui ( NULL ! = faili ) {
tagasi kerida ( faili ) ;
WITH_ASSERT ( 9 == pettumus ( puhver, suurus ( märgita täht ) , kakskümmend , faili ) ) ;
WITH_ASSERT ( 0 == strncmp ( puhver, 'K \n x1 = 10' , 9 ) ) ;
}
}

int main ( )
{
CU_pSuite pSuite = NULL;
kui ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
tagasi CU_get_error ( ) ;
pSuite = CU_add_suite ( 'Sviit 1' , init_suite1, clean_suite1 ) ;
kui ( NULL == pSuite ) {
CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}
kui ( ( NULL == CU_lisa_test ( pSuite, 'fprintf() funktsiooni test' , test_fprintf ) ) ||
( NULL == CU_lisa_test ( pSuite, 'Fread() funktsiooni test' , test_fread ) ) )
{
CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}
CU_basic_set_mode ( CU_BRM_VERBOSE ) ;
CU_basic_run_tests ( ) ;
CU_cleanup_register ( ) ;
tagasi CU_get_error ( ) ;
}







Päisefailis oleme määratlenud CUniti standardteegi “CUnit.h/Basic.h”. Seejärel deklareerisime testides kasutatud faili osutajana 'faili'. Järgmiseks oleme konstrueerinud funktsiooni 'init_suite1', mis avab ajutise faili 'MinuFail.txt' ja tagastab õnnestumise korral väärtuse null; vastasel juhul tagastatakse nullist erinev väärtus. Faili sulgemiseks oleme loonud komplekti puhastusfunktsiooni, mis tagastab ajutise faili sulgemise tõrke korral ka nullist erineva väärtuse. Vastasel juhul saadakse ajutise faili edukal sulgemisel nullväärtus. Seejärel oleme lihtsalt rakendanud funktsiooni 'test_fprintf', kus oleme sisestanud andmed ajutisse faili 'MYfile.txt'. Need testfunktsioonid kontrollisid ka baitide arvu, mida proovisime faili kirjutada.

Pärast seda lõime funktsiooni 'test_fread' jaoks teise funktsiooni, et testida fread meetodit. Siin oleme kontrollinud, et funktsiooni 'test_fprinf()' poolt varem kirjutatud andmetes on määratud märgid olemas. Seejärel on meil põhifunktsioon, kus käideldakse seadistatud ja sooritatud teste. Määratlesime põhifunktsioonis pSuite'i ja lähtestasime registri testfunktsiooni 'CU_initialize_resgistry' abil. Oleme kutsunud ka funktsiooni 'CU_add_suite' komplekti lisamiseks registrisse ja lisanud komplektidesse määratud testid funktsiooni 'CU_add_test' abil.

Koodi tulemuste kuvamiseks kasutatakse lõpuks põhilisi CUniti testiliideseid. Pange tähele, et põhifunktsioon tagastab eduka täitmise korral koodi 'CUE_SUCCESS' ja ebaõnnestunud täitmise korral erineva 'CUnit_error' koodi.

Käivitasime CUnit testi jaoks eelmise koodi, mis kuvas programmi kokkuvõtte ja edukate testide meetodi teate.

Järeldus

CUnit on põhiraamistik, mis pakub erinevaid kasutajaliideseid. See võimaldab meil hallata testkomplekte, testjuhtumeid ja testiregistreid. Programmide testimise ja nende testide tulemuste nägemise muudavad kasutajaliidesed lihtsamaks. Oleme selle artikliga käsitlenud CUniti testi raamistikku C-s. Demonstreerisime installimist ja seejärel rakendasime kaks töötavat programmi C-keeles. Varasemad testitud programmid on andnud edukaid tulemusi.