CEnhet i C

Cenhet I C



CUnit-systemet brukes til å utføre enhetstesten i C, som muliggjør administrasjon og utførelse av testene. Den dekker et mangfold av påstander for testing av vanlige datatyper og bruker en enkel arkitektur for å lage teststrukturer. Brukerens testkode er knyttet til CUnit, som er utformet som et statisk bibliotek. Vi kan undersøke ytelsen til C-programmets oppgaver og funksjoner ved å bruke CUnit-testrammeverket. Hver spesiell oppgave i C-programmet har forskjellige inputomstendigheter og utgangsbegrensninger. For å bruke CUnit for å teste C-programmet, bør vi installere det først i systemet vårt. Trinnene for å installere CUnit er skissert nedenfor.

Slik bruker du CUnit-rammeverket i Ubuntu 22.04

For å bruke CUnit-testrammeverket i systemet vårt, må vi følge installasjonstrinnene. Disse trinnene gjelder for Ubuntu 22.04-systemet. Før installasjonen oppdaterte vi først systemet vårt. Systemet krevde sudo-privilegium for å bli oppdatert med apt-kommandoen.








For å skaffe sudo-privilegier, ba terminalen om autentisering fra sudo-brukeren. Deretter oppdaterer du systempakkene og deres avhengigheter, som vist nedenfor.




Nå har vi installert CUnit-rammeverket ved å bruke følgende kommando. Denne kommandoen kan installere pakkene libcunitl, libcunitl-doc og libcunitl-dev fra pakkelageret.




Når CUnit-installasjonskommandoen er utført, kreves brukerpassordet. De essensielle CUnit-pakkene er installert i vår Ubuntu 22.04.





Eksempel 1

Vi fullførte installasjonstrinnet for CUnit-rammeverket i forrige seksjon. Nå har vi testet sum- og differansemetoden for å se de forventede resultatene i følgende eksempel ved å bruke CUnit-testrammeverket.



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

int init_suite ( tomrom ) { komme tilbake 0 ; }
int clean_suite ( tomrom ) { komme tilbake 0 ; }

int MySum ( du er a1, du er b1 )

{
int res1;
res1 =a1+b1;
komme tilbake res1;
}

int MyDiff ( int a2, int b2 )

{
int res2;
res2 =a2-b2;
komme tilbake res2;
}

void test_MySum ( tomrom )
{
WITH_ASSERT ( 4 ==Min Sum ( to , to ) ) ;
WITH_ASSERT ( 8 ==Min Sum ( 5 , 3 ) ) ;
WITH_ASSERT ( to ==Min Sum ( - to , 4 ) ) ;
WITH_ASSERT ( 7 ==Min Sum ( 0 , 7 ) ) ;
}


void test_MyDiff ( tomrom )
{
WITH_ASSERT ( 3 ==MyDiff ( 5 , to ) ) ;
WITH_ASSERT ( - 4 ==MyDiff ( 4 , 8 ) ) ;
WITH_ASSERT ( - 7 ==MyDiff ( - 3 , 4 ) ) ;
WITH_ASSERT ( - 9 ==MyDiff ( 0 , 9 ) ) ;
}


int main ( tomrom )
{

CU_pSuite pSuite1,pSuite2 = NULL;

hvis ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
komme tilbake CU_get_error ( ) ;

pSuite1 = CU_add_suite ( 'Test Suite1' , init_suite, clean_suite ) ;
hvis ( NULL == pSuite1 ) {
CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}

hvis ( ( NULL == CU_add_test ( pSuite1, ' \n \n Sum funksjon Testing \n \n ' , test_MinSum ) ) )
{
CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}

hvis ( ( NULL == CU_add_test ( pSuite1, ' \n \n Forskjell funksjon Testing \n \n ' , test_MyDiff ) ) )
{
CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}

CU_basic_run_tests ( ) ;

CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}







Først, for å generere CUnit-strukturen, har vi satt inn CUnit-biblioteket 'CUnit/Basic.h' med det inkluderte nøkkelordet. Dette C-biblioteket er for rammeverk for enhetstesting og tilbyr et enkelt konsollutgangsgrensesnitt. Deretter la vi til to funksjoner, 'init_suite' for initialisering av suitefunksjonen og 'clean_suite' for opprydding av suitefunksjonen, til programmet vårt for testing.

Deretter konstruerte vi metoder, 'MySum' og 'MyDiff', som skal testes av CUnit. Vi har kalt konstruktøren for disse funksjonene, som inneholder variablene som sum- og differanseoperasjoner er utført på. Deretter har vi etablert en funksjon som 'test_MySum' for å teste. Inne i funksjonen har vi brukt 'CU_ASSERT'-metoden, hvor init-uttrykkene for summen er tilordnet. Samme som 'test_MySum', har vi konstruert test_MyDiff-funksjonen for å teste uttrykket for forskjellige operasjoner ved å bruke 'CU_ASSERT'-metoden.

Deretter har vi CUnit-løperkoden inne i hovedmetoden. Her har vi laget to suiter, 'pSuite1' og 'pSuite2', fra 'CU_pSuite'-metoden og tildelt disse suitene en NULL-verdi. Vi har laget disse suitene for å utføre CUnit-testen som skal registreres i testregisteret. Før vi la til suitene i 'test_registry', opprettet vi registret og initialiserte det med 'if condition'. Vi har brukt 'CU_initialze_registry()'-metoden for å lage registret for testsuiter.

Etter det la vi til pSuite1 i testregisteret ved å påkalle 'CU_add_suite'-metoden til CUnit. Etter det la vi testene våre, 'test_MySum' og 'test_MyDiff', til de spesifiserte suitene ved å bruke 'CU_add_test()'-metoden. Til slutt viste vi resultatene av CUnit-testen ved å kalle 'CU_basic_run_tests()'-metoden og renset registeret når resultatene ble vist. Feilen som oppstår mens du utfører CUnit-testene vil bli kastet av funksjonen 'CU_get_error()'.

Den forrige CUnit-testfilen lagres som mytest.c-filen. Vi har utført denne C-filen med GCC-kommandoen. Vi har brukt flagget -lcunit for kjøring av CUnit-testfil. Med denne kommandoen kompileres koden vår. Deretter utførte vi mytest-filen, og den viste de forventede resultatene av CUnit-testen ettersom alle testene ble bestått uten feil.

Eksempel 2

Vi har et annet eksempel hvor vi har testet de to filhåndteringsmetodene, 'fread' og 'fprintf', ved hjelp av CUnit-tilnærmingen. Vi åpnet og lukket den midlertidige filen ved å bruke CUnit-testfunksjonene. CUnit-testoperasjonene tester bibliotekfunksjonene ved å skrive og lese fra den midlertidige filen.

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

statisk FIL * fil = NULL;
int init_suite1 ( tomrom )
{
hvis ( NULL == ( fil = fopen ( 'MyFile.txt' , 'w +' ) ) ) {
komme tilbake -1 ;
}
ellers {
komme tilbake 0 ;
}
}

int clean_suite1 ( tomrom )
{
hvis ( 0 ! = fnær ( fil ) ) {
komme tilbake -1 ;
}
ellers {
fil = NULL;
komme tilbake 0 ;
}
}


void test_fprintf ( tomrom )
{
int x1 = 10 ;

hvis ( NULL ! = fil ) {
WITH_ASSERT ( to == fprintf ( fil , 'Q \n ' ) ) ;
WITH_ASSERT ( 7 == fprintf ( fil , 'x1 = %d' , x1 ) ) ;
}
}

void test_fread ( tomrom )
{
usignert char buffer [ tjue ] ;

hvis ( NULL ! = fil ) {
spole ( fil ) ;
WITH_ASSERT ( 9 == fread ( buffer, størrelse på ( usignert røye ) , tjue , fil ) ) ;
WITH_ASSERT ( 0 == strncmp ( buffer, 'Q \n x1 = 10' , 9 ) ) ;
}
}

int main ( )
{
CU_pSuite pSuite = NULL;
hvis ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
komme tilbake CU_get_error ( ) ;
pSuite = CU_add_suite ( 'Suite 1' , init_suite1, clean_suite1 ) ;
hvis ( NULL == pSuite ) {
CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}
hvis ( ( NULL == CU_add_test ( pSuite, 'fprintf() funksjonstest' , test_fprintf ) ) ||
( NULL == CU_add_test ( pSuite, 'fread() funksjonstest' , test_fread ) ) )
{
CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}
CU_basic_set_mode ( CU_BRM_VERBOSE ) ;
CU_basic_run_tests ( ) ;
CU_cleanup_register ( ) ;
komme tilbake CU_get_error ( ) ;
}







Innenfor overskriftsfilen har vi definert CUnit standardbiblioteket 'CUnit.h/Basic.h'. Deretter erklærte vi 'fil' som en peker til filen som ble brukt av testene. Deretter har vi konstruert funksjonen 'init_suite1' som åpner den midlertidige filen 'MyFile.txt' og returnerer verdien null ved suksess; ellers vil en verdi som ikke er null returneres. For å lukke filen har vi laget funksjonen for suiteopprydding, som også returnerer en verdi som ikke er null ved feil mens den midlertidige filen lukkes. Ellers oppnås null verdi ved vellykket lukking av den midlertidige filen. Deretter har vi ganske enkelt implementert en funksjon 'test_fprintf' hvor vi har satt inn dataene i den midlertidige filen 'MYfile.txt'. Disse testfunksjonene bekreftet også antall byte som vi forsøkte å skrive i filen.

Etter det opprettet vi en annen funksjon for 'test_fread'-funksjonen for å teste fread-metoden. Her har vi sjekket at de spesifiserte tegnene er tilstede i de tidligere skrevne dataene med 'test_fprinf()'-funksjonen. Deretter har vi hovedfunksjonen der testene som er satt opp og utført, håndteres. Vi definerte 'pSuite' i hovedfunksjonen og initialiserte registret ved å bruke testfunksjonen 'CU_initialize_resistry'. Vi har også kalt «CU_add_suite»-funksjonen for å legge til suiten i registeret og lagt til de spesifiserte testene til suitene ved hjelp av «CU_add_test»-funksjonen.

De grunnleggende CUnit-testgrensesnittene brukes til slutt for å vise resultatene av koden. Merk at hovedfunksjonen returnerer en 'CUE_SUCCESS' ved vellykket kjøring og en annen 'CUnit_error'-kode ved mislykket kjøring.

Vi har kjørt den forrige koden for CUnit-testen, som viste programsammendraget og de vellykkede testenes metodemelding.

Konklusjon

CUnit er et kjernerammeverk som gir ulike brukergrensesnitt. Det lar oss administrere testsuiter, testtilfeller og testregistre. Å teste programmene og se resultatene av disse testene er gjort enklere av brukergrensesnittene. Vi har dekket CUnit-testrammeverket i C med denne artikkelen. Vi demonstrerte installasjonen og implementerte deretter to kjørende programmer i C-språk. De tidligere testede programmene har gitt vellykkede resultater.