CU vienetas C

Cu Vienetas C



CUnit sistema naudojama vienetų testavimui atlikti C kalba, kuri leidžia administruoti ir vykdyti testus. Jis apima įvairius tvirtinimus, skirtus dažniausiai naudojamiems duomenų tipams tikrinti, ir naudoja paprastą architektūrą bandymų struktūroms kurti. Vartotojo testavimo kodas yra susietas su CUnit, kuris sukurtas kaip statinė biblioteka. Galime patikrinti C programos užduočių ir funkcijų našumą naudodami CUnit testavimo sistemą. Kiekviena konkreti C programos užduotis turi skirtingas įvesties aplinkybes ir išvesties apribojimus. Norėdami naudoti CUnit C programai išbandyti, pirmiausia turėtume ją įdiegti savo sistemoje. CUnit diegimo veiksmai aprašyti toliau.

Kaip naudoti CUnit Framework Ubuntu 22.04

Norėdami savo sistemoje panaudoti CUnit testavimo sistemą, turime atlikti diegimo veiksmus. Šie veiksmai taikomi Ubuntu 22.04 sistemai. Prieš diegdami pirmiausia atnaujinome savo sistemą. Sistema reikalavo sudo privilegijų, kad būtų atnaujinta naudojant komandą apt.








Norėdami įgyti sudo privilegijas, terminalas paprašė sudo vartotojo autentifikavimo. Tada atnaujinkite sistemos paketus ir jų priklausomybes, kaip parodyta toliau.




Dabar mes įdiegėme CUnit sistemą naudodami šią komandą. Ši komanda gali įdiegti libcunitl, libcunitl-doc ir libcunitl-dev paketus iš paketų saugyklos.




Įvykdžius CUnit diegimo komandą, reikalingas vartotojo slaptažodis. Pagrindiniai CUnit paketai buvo įdiegti mūsų Ubuntu 22.04.





1 pavyzdys

Ankstesniame skyriuje užbaigėme CUnit sistemos diegimo veiksmą. Dabar mes išbandėme sumos ir skirtumo metodą, kad pamatytume laukiamus rezultatus kitame pavyzdyje, naudodami CUnit testavimo sistemą.



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

int init_suite ( tuštuma ) { grąžinti 0 ; }
int clean_suite ( tuštuma ) { grąžinti 0 ; }

int MySum ( tu esi a1, tu esi b1 )

{
int res1;
res1 =a1+b1;
grąžinti res1;
}

int MyDiff ( int a2, int b2 )

{
int res2;
res2 =a2-b2;
grąžinti res2;
}

negaliojantis testas_MySum ( tuštuma )
{
WITH_ASSERT ( 4 ==Mano suma ( du , du ) ) ;
WITH_ASSERT ( 8 ==Mano suma ( 5 , 3 ) ) ;
WITH_ASSERT ( du ==Mano suma ( - du , 4 ) ) ;
WITH_ASSERT ( 7 ==Mano suma ( 0 , 7 ) ) ;
}


negaliojantis testas_MyDiff ( tuštuma )
{
WITH_ASSERT ( 3 ==Mano skirtumas ( 5 , du ) ) ;
WITH_ASSERT ( - 4 ==Mano skirtumas ( 4 , 8 ) ) ;
WITH_ASSERT ( - 7 ==Mano skirtumas ( - 3 , 4 ) ) ;
WITH_ASSERT ( - 9 ==Mano skirtumas ( 0 , 9 ) ) ;
}


tarp pagrindinis ( tuštuma )
{

CU_pSuite pSuite1,pSuite2 = NULL;

jeigu ( CUE_SUCCESS ! = CU_inicializuoti_registrą ( ) )
grąžinti CU_get_error ( ) ;

pSuite1 = CU_add_suite ( „Test Suite1“ , init_suite, clean_suite ) ;
jeigu ( NULL == pSuite1 ) {
CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}

jeigu ( ( NULL == CU_add_test ( pSuite1, \n \n Sumos funkcijos testavimas \n \n , test_MySum ) ) )
{
CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}

jeigu ( ( NULL == CU_add_test ( pSuite1, \n \n Skirtumų funkcijos testavimas \n \n , test_MyDiff ) ) )
{
CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}

CU_basic_run_tests ( ) ;

CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}







Pirma, norėdami sukurti CUnit struktūrą, įterpėme CUnit biblioteką „CUnit/Basic.h“ su įtrauktu raktiniu žodžiu. Ši C biblioteka skirta vienetų testavimo sistemoms ir siūlo paprastą konsolės išvesties sąsają. Tada į testavimo programą įtraukėme dvi funkcijas: „init_suite“, skirtą rinkinio funkcijos inicijavimui, ir „clean_suite“, skirtas rinkinio funkcijos išvalymui.

Toliau mes sukūrėme metodus „MySum“ ir „MyDiff“, kuriuos išbandys CUnit. Šioms funkcijoms iškvietėme konstruktorių, kuriame yra kintamieji, su kuriais buvo atliktos sumos ir skirtumo operacijos. Tada mes sukūrėme funkciją „test_MySum“, kurią norite išbandyti. Funkcijos viduje panaudojome „CU_ASSERT“ metodą, kur priskiriamos sumos pradinės išraiškos. Kaip ir „test_MySum“, mes sukūrėme funkciją test_MyDiff, kad išbandytume skirtingų operacijų išraišką naudodami „CU_ASSERT“ metodą.

Tada pagrindinio metodo viduje turime CUnit paleidimo kodą. Čia mes sukūrėme du rinkinius, „pSuite1“ ir „pSuite2“, naudodami metodą „CU_pSuite“ ir priskyrėme šiems rinkiniams NULL reikšmę. Sukūrėme šiuos rinkinius, kad vykdytume CUnit testą, kuris turėtų būti užregistruotas bandymų registre. Prieš įtraukdami rinkinius prie „test_registry“, sukūrėme registrą ir inicijavome jį su sąlyga „jei“. Naudojome metodą „CU_initialze_registry()“ kurdami registrą, skirtą rinkinių testavimui.

Po to mes įtraukėme pSuite1 į bandomąjį registrą, pasinaudodami CUnit metodu „CU_add_suite“. Po to mes įtraukėme savo testus „test_MySum“ ir „test_MyDiff“ prie nurodytų rinkinių, naudodami „CU_add_test()“ metodą. Galų gale mes parodėme CUnit testo rezultatus iškviesdami metodą 'CU_basic_run_tests()' ir išvalėme registrą, kai rezultatai buvo sėkmingai parodyti. Klaidą, aptiktą atliekant CUnit testus, išmes funkcija „CU_get_error()“.

Ankstesnis CUnit bandomasis failas išsaugomas kaip failas mytest.c. Mes vykdėme šį C failą naudodami GCC komandą. CUnit bandomojo failo vykdymui naudojome vėliavėlę -lcunit. Su šia komanda mūsų kodas sukompiliuojamas. Tada mes vykdėme mytest failą ir jis parodė laukiamus CUnit testo rezultatus, nes visi testai buvo išlaikyti be jokių nesėkmių.

2 pavyzdys

Turime dar vieną pavyzdį, kai išbandėme du failų tvarkymo metodus, „fread“ ir „fprintf“, naudodami CUnit metodą. Atidarėme ir uždarėme laikinąjį failą naudodami CUnit testo funkcijas. CUnit testavimo operacijos tikrina bibliotekos funkcijas rašydami ir skaitydami iš laikinojo failo.

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

statinis FAILAS * failą = NULL;
int init_suite1 ( tuštuma )
{
jeigu ( NULL == ( failą = fopen ( „Mano failas.txt“ , 'w +' ) ) ) {
grąžinti -1 ;
}
Kitas {
grąžinti 0 ;
}
}

int švarus_suite1 ( tuštuma )
{
jeigu ( 0 ! = fclose ( failą ) ) {
grąžinti -1 ;
}
Kitas {
failą = NULL;
grąžinti 0 ;
}
}


negalioja test_fprintf ( tuštuma )
{
int x1 = 10 ;

jeigu ( NULL ! = failą ) {
WITH_ASSERT ( du == fprintf ( failą , 'Q \n ) ) ;
WITH_ASSERT ( 7 == fprintf ( failą , 'x1 = %d' , x1 ) ) ;
}
}

void test_fread ( tuštuma )
{
nepasirašytas char buferis [ dvidešimt ] ;

jeigu ( NULL ! = failą ) {
atsukti ( failą ) ;
WITH_ASSERT ( 9 == pasimetęs ( buferis, dydisof ( nepasirašytas char ) , dvidešimt , failą ) ) ;
WITH_ASSERT ( 0 == strncmp ( buferis, 'Q \n x1 = 10' , 9 ) ) ;
}
}

tarp pagrindinis ( )
{
CU_pSuite pSuite = NULL;
jeigu ( CUE_SUCCESS ! = CU_inicializuoti_registrą ( ) )
grąžinti CU_get_error ( ) ;
pSuite = CU_add_suite ( 'Suite1' , init_suite1, clean_suite1 ) ;
jeigu ( NULL == pSuite ) {
CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}
jeigu ( ( NULL == CU_add_test ( pSuite, 'fprintf() funkcijos testas' , test_fprintf ) ) ||
( NULL == CU_add_test ( pSuite, 'fread() funkcijos testas' , test_fread ) ) )
{
CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}
CU_basic_set_mode ( CU_BRM_VERBOSE ) ;
CU_basic_run_tests ( ) ;
CU_valymo_registras ( ) ;
grąžinti CU_get_error ( ) ;
}







Antraštės faile apibrėžėme standartinę CUnit biblioteką „CUnit.h/Basic.h“. Tada mes paskelbėme „failą“ kaip rodyklę į testuose naudojamą failą. Toliau sukonstravome funkciją „init_suite1“, kuri atidaro laikiną failą „MyFile.txt“ ir grąžina reikšmę nuliui, kai pavyksta; kitu atveju bus grąžinta ne nulis reikšmė. Norėdami uždaryti failą, sukūrėme rinkinio valymo funkciją, kuri taip pat grąžina ne nulinę reikšmę, jei nepavyko uždarant laikinojo failo. Priešingu atveju, sėkmingai uždarius laikinąjį failą, gaunama nulinė reikšmė. Tada mes tiesiog įdiegėme funkciją „test_fprintf“, kur duomenis įdėjome į laikiną failą „MYfile.txt“. Šios testavimo funkcijos taip pat patikrino baitų, kuriuos bandėme įrašyti į failą, skaičių.

Po to sukūrėme kitą funkciją „test_fread“, kad išbandytume fread metodą. Čia mes patikrinome, ar nurodyti simboliai yra anksčiau įrašytuose duomenyse naudojant funkciją „test_fprinf()“. Tada turime pagrindinę funkciją, kurioje tvarkomi nustatyti ir vykdomi testai. Apibrėžėme „pSuite“ pagrindinėje funkcijoje ir inicijavome registrą naudodami „CU_initialize_resgistry“ testavimo funkciją. Taip pat iškvietėme funkciją „CU_add_suite“, kad įtrauktume rinkinį į registrą, ir įtraukėme nurodytus testus prie rinkinių naudodami funkciją „CU_add_test“.

Pagrindinės CUnit testavimo sąsajos naudojamos kodo rezultatams rodyti. Atkreipkite dėmesį, kad pagrindinė funkcija grąžina „CUE_SUCCESS“ sėkmingai įvykdžius, o kitą „CUnit_error“ kodą, kai vykdymas nesėkmingas.

Paleidome ankstesnį CUnit testo kodą, kuriame buvo rodoma programos santrauka ir sėkmingų testų metodo pranešimas.

Išvada

CUnit yra pagrindinė sistema, teikianti įvairias vartotojo sąsajas. Tai leidžia mums valdyti bandymų rinkinius, bandymų atvejus ir bandymų registrus. Programų testavimą ir tų testų rezultatų peržiūrą palengvina vartotojo sąsajos. Šiame straipsnyje aptarėme CUnit bandymo sistemą C. Mes pademonstravome diegimą ir įdiegėme dvi veikiančias programas C kalba. Ankstesnės išbandytos programos davė sėkmingų rezultatų.