CU-egység C-ben

Cu Egyseg C Ben



A CUnit rendszer a C nyelvű egységtesztek elvégzésére szolgál, amely lehetővé teszi a tesztek adminisztrációját és végrehajtását. Az általánosan használt adattípusok tesztelésére vonatkozó állítások széles skáláját fedi le, és egy egyszerű architektúrát használ tesztstruktúrák létrehozásához. A felhasználó tesztelési kódja össze van kapcsolva a CUnit-tel, amelyet statikus könyvtárként terveztek. A C program feladatainak és funkcióinak teljesítményét a CUnit tesztkeretrendszer segítségével vizsgálhatjuk. A C program minden egyes feladatának különböző beviteli körülményei és kimeneti korlátai vannak. Ahhoz, hogy a CUnit-et a C program tesztelésére használjuk, először telepítenünk kell a rendszerünkbe. Az alábbiakban ismertetjük a CUnit telepítésének lépéseit.

A CUnit Framework használata az Ubuntu 22.04-ben

A CUnit tesztelési keretrendszer rendszerünkben való használatához követnünk kell a telepítési lépéseket. Ezek a lépések az Ubuntu 22.04 rendszerre vonatkoznak. A telepítés előtt először frissítettük rendszerünket. A rendszernek sudo jogosultságra volt szüksége az apt paranccsal történő frissítéshez.








A sudo jogosultságok megszerzéséhez a terminál hitelesítést kért a sudo felhasználótól. Ezután frissítse a rendszercsomagokat és azok függőségeit az alábbiak szerint.




Most telepítettük a CUnit keretrendszert a következő paranccsal. Ez a parancs telepítheti a libcunitl, libcunitl-doc és libcunitl-dev csomagokat a csomagtárból.




A CUnit telepítési parancs végrehajtása után meg kell adni a felhasználói jelszót. A CUnit alapvető csomagjait telepítettük az Ubuntu 22.04-be.





1. példa

Az előző részben befejeztük a CUnit keretrendszer telepítési lépését. Most teszteltük az összeg és különbség módszert, hogy a következő példában a várt eredményeket lássuk a CUnit tesztelési keretrendszer használatával.



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

int init_suite ( üres ) { Visszatérés 0 ; }
int clean_suite ( üres ) { Visszatérés 0 ; }

int MySum ( te a1 vagy, te b1 vagy )

{
int res1;
res1 =a1+b1;
Visszatérés res1;
}

int MyDiff ( int a2, int b2 )

{
int res2;
res2 =a2-b2;
Visszatérés res2;
}

void test_MySum ( üres )
{
WITH_ASSERT ( 4 ==Sajátösszeg ( két , két ) ) ;
WITH_ASSERT ( 8 ==Sajátösszeg ( 5 , 3 ) ) ;
WITH_ASSERT ( két ==Sajátösszeg ( - két , 4 ) ) ;
WITH_ASSERT ( 7 ==Sajátösszeg ( 0 , 7 ) ) ;
}


void test_MyDiff ( üres )
{
WITH_ASSERT ( 3 ==MyDiff ( 5 , két ) ) ;
WITH_ASSERT ( - 4 ==MyDiff ( 4 , 8 ) ) ;
WITH_ASSERT ( - 7 ==MyDiff ( - 3 , 4 ) ) ;
WITH_ASSERT ( - 9 ==MyDiff ( 0 , 9 ) ) ;
}


int fő ( üres )
{

CU_pSuite pSuite1,pSuite2 = NULL;

ha ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
Visszatérés CU_get_error ( ) ;

pSuite1 = CU_add_suite ( 'Teszt Suite1' , init_suite, clean_suite ) ;
ha ( NULL == pSuite1 ) {
CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}

ha ( ( NULL == CU_add_test ( pSuite1, ' \n \n Összegfüggvény tesztelése \n \n ' , teszt_MySum ) ) )
{
CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}

ha ( ( NULL == CU_add_test ( pSuite1, ' \n \n Különbségfüggvény tesztelése \n \n ' , teszt_MyDiff ) ) )
{
CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}

CU_basic_run_tests ( ) ;

CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}







Először is, a CUnit struktúra létrehozásához beillesztjük a „CUnit/Basic.h” CUnit könyvtárat a benne szereplő kulcsszóval. Ez a C-könyvtár egységtesztelési keretrendszerekhez készült, és egyszerű konzolkimeneti felületet kínál. Ezután tesztelési programunkhoz hozzáadtunk két függvényt, az „init_suite”-ot a suite függvény inicializálására és a „clean_suite”-t a suite függvény tisztítására.

Ezután elkészítettük a „MySum” és „MyDiff” metódusokat, amelyeket a CUnit tesztelhet. Ezekhez a függvényekhez hívtuk a konstruktort, amely azokat a változókat tartalmazza, amelyeken összeg- és különbségműveleteket hajtottak végre. Ezután létrehoztunk egy „test_MySum” függvényt a teszteléshez. A függvényen belül a „CU_ASSERT” metódust alkalmaztuk, ahol az összeg init kifejezései vannak hozzárendelve. Ugyanúgy, mint a „test_MySum”, elkészítettük a test_MyDiff függvényt, amely a „CU_ASSERT” metódussal teszteli a kifejezést a különböző műveletekhez.

Ezután a fő metóduson belül van a CUnit futtató kódja. Itt két csomagot, a „pSuite1”-et és a „pSuite2-t” hoztunk létre a „CU_pSuite” metódusból, és ezekhez a csomagokhoz NULL értéket rendeltünk. Ezeket a csomagokat a CUnit teszt végrehajtására hoztuk létre, amelyet regisztrálni kell a tesztnyilvántartásban. Mielőtt hozzáadtuk a csomagokat a „test_registry”-hoz, létrehoztuk a rendszerleíró adatbázist, és inicializáltuk az „if feltétellel”. A „CU_initialze_registry()” metódust használtuk a rendszerleíró adatbázis létrehozásához a csomagok teszteléséhez.

Ezt követően hozzáadtuk a pSuite1-et a tesztnyilvántartáshoz a CUnit „CU_add_suite” metódusának meghívásával. Ezt követően hozzáadtuk a „test_MySum” és „test_MyDiff” tesztjeinket a megadott csomagokhoz a „CU_add_test()” metódussal. Végül a „CU_basic_run_tests()” metódus meghívásával megjelenítettük a CUnit teszt eredményeit, és az eredmények sikeres megjelenítése után megtisztítottuk a rendszerleíró adatbázist. A CUnit tesztek végrehajtása során észlelt hibát a „CU_get_error()” függvény dobja ki.

Az előző CUnit tesztfájl mytest.c fájlként kerül mentésre. Ezt a C fájlt a GCC paranccsal futtattuk. A -lcunit jelzőt használtuk a CUnit tesztfájl végrehajtásához. Ezzel a paranccsal a kódunk lefordításra kerül. Ezután végrehajtottuk a mytest fájlt, amely a CUnit teszt várt eredményeit mutatta, mivel minden teszt sikertelen volt.

2. példa

Van egy másik példa, ahol a két fájlkezelési módszert, a „fread”-et és az „fprintf”-t teszteltük CUnit megközelítéssel. Az ideiglenes fájlt a CUnit tesztfunkcióival nyitottuk meg és zártuk be. A CUnit tesztműveletek az ideiglenes fájl írásával és olvasásával tesztelik a könyvtári funkciókat.

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

statikus FÁJL * fájlt = NULL;
int init_suite1 ( üres )
{
ha ( NULL == ( fájlt = fopen ( 'SajátFájl.txt' , 'w +' ) ) ) {
Visszatérés -1 ;
}
más {
Visszatérés 0 ;
}
}

int clean_suite1 ( üres )
{
ha ( 0 ! = fclose ( fájlt ) ) {
Visszatérés -1 ;
}
más {
fájlt = NULL;
Visszatérés 0 ;
}
}


void test_fprintf ( üres )
{
int x1 = 10 ;

ha ( NULLA ! = fájlt ) {
WITH_ASSERT ( két == fprintf ( fájlt , 'K \n ' ) ) ;
WITH_ASSERT ( 7 == fprintf ( fájlt , 'x1 = %d' , x1 ) ) ;
}
}

void teszt_fread ( üres )
{
unsigned char puffer [ húsz ] ;

ha ( NULLA ! = fájlt ) {
visszatekerés ( fájlt ) ;
WITH_ASSERT ( 9 == frász ( puffer, mérete ( előjel nélküli char ) , húsz , fájlt ) ) ;
WITH_ASSERT ( 0 == strncmp ( puffer, 'K \n x1 = 10' , 9 ) ) ;
}
}

int fő ( )
{
CU_pSuite pSuite = NULL;
ha ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
Visszatérés CU_get_error ( ) ;
pSuite = CU_add_suite ( 'Suite1' , init_suite1, clean_suite1 ) ;
ha ( NULL == pSuite ) {
CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}
ha ( ( NULL == CU_add_test ( pSuite, 'fprintf() függvény teszt' , test_fprintf ) ) ||
( NULL == CU_add_test ( pSuite, 'fread() függvény teszt' , teszt_fread ) ) )
{
CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}
CU_basic_set_mode ( CU_BRM_VERBOSE ) ;
CU_basic_run_tests ( ) ;
CU_cleanup_registry ( ) ;
Visszatérés CU_get_error ( ) ;
}







A fejlécfájlon belül meghatároztuk a CUnit szabványos „CUnit.h/Basic.h” könyvtárát. Ezután a „file”-t deklaráltuk a tesztek által használt fájl mutatójaként. Ezután elkészítettük az „init_suite1” függvényt, amely megnyitja a „MyFile.txt” ideiglenes fájlt, és siker esetén nulla értéket ad vissza; ellenkező esetben nullától eltérő értéket ad vissza a rendszer. A fájl bezárásához létrehoztuk a csomagtisztítási függvényt, amely szintén nullától eltérő értéket ad vissza, ha az ideiglenes fájl bezárásakor meghibásodik. Ellenkező esetben az ideiglenes fájl sikeres bezárásakor nulla értéket kapunk. Ezután egyszerűen megvalósítottunk egy „test_fprintf” függvényt, ahol beszúrtuk az adatokat a „MYfile.txt” ideiglenes fájlba. Ezek a tesztfüggvények azt is ellenőrizték, hogy hány bájtot próbáltunk beírni a fájlba.

Ezt követően létrehoztunk egy másik függvényt a „test_fread” függvényhez a fread módszer tesztelésére. Itt ellenőriztük, hogy a „test_fprinf()” függvény által korábban megírt adatokban a megadott karakterek jelen vannak-e. Ezután megvan a fő funkció, ahol a beállított és végrehajtott teszteket kezeljük. Meghatároztuk a „pSuite”-ot a fő függvényben, és inicializáltuk a rendszerleíró adatbázist a „CU_initialize_resgistry” tesztfüggvénnyel. Meghívtuk a „CU_add_suite” függvényt is, hogy hozzáadjuk a csomagot a rendszerleíró adatbázishoz, és a „CU_add_test” függvény segítségével hozzáadtuk a megadott teszteket a csomagokhoz.

Az alapvető CUnit teszt interfészek a végén a kód eredményeinek megjelenítésére szolgálnak. Vegye figyelembe, hogy a fő függvény sikeres végrehajtás esetén „CUE_SUCCESS”, sikertelen végrehajtás esetén pedig másik „CUnit_error” kódot ad vissza.

A CUnit teszt előző kódját futtattuk, amely megjelenítette a program összefoglalóját és a sikeres tesztek módszerüzenetét.

Következtetés

A CUnit egy alapvető keretrendszer, amely különféle felhasználói felületeket biztosít. Lehetővé teszi tesztcsomagok, tesztesetek és tesztregiszterek kezelését. A programok tesztelését és a tesztek eredményeinek megtekintését a felhasználói felületek könnyítik meg. Ebben a cikkben bemutattuk a C nyelvű CUnit tesztkeretrendszert. Bemutattuk a telepítést, majd két futó programot implementáltunk C nyelven. A korábbi tesztelt programok sikeres eredményeket hoztak.