CUunt στο C

Cuunt Sto C



Το σύστημα CUnit χρησιμοποιείται για την εκτέλεση της δοκιμής μονάδας στο C, το οποίο επιτρέπει τη διαχείριση και την εκτέλεση των δοκιμών. Καλύπτει ένα ευρύ φάσμα ισχυρισμών για τον έλεγχο των κοινώς χρησιμοποιούμενων τύπων δεδομένων και χρησιμοποιεί μια απλή αρχιτεκτονική για τη δημιουργία δομών δοκιμής. Ο κώδικας δοκιμής του χρήστη συνδέεται με το CUnit, το οποίο έχει σχεδιαστεί ως στατική βιβλιοθήκη. Μπορούμε να εξετάσουμε την απόδοση των εργασιών και των λειτουργιών του προγράμματος C χρησιμοποιώντας το πλαίσιο δοκιμής CUnit. Κάθε συγκεκριμένη εργασία του προγράμματος C έχει διαφορετικές συνθήκες εισόδου και περιορισμούς εξόδου. Για να χρησιμοποιήσουμε το CUnit για τη δοκιμή του προγράμματος C, θα πρέπει να το εγκαταστήσουμε πρώτα στο σύστημά μας. Τα βήματα για την εγκατάσταση του CUnit περιγράφονται παρακάτω.

Πώς να χρησιμοποιήσετε το CUnit Framework στο Ubuntu 22.04

Για να χρησιμοποιήσουμε το πλαίσιο δοκιμών CUnit στο σύστημά μας, πρέπει να ακολουθήσουμε τα βήματα εγκατάστασης. Αυτά τα βήματα ισχύουν για το σύστημα Ubuntu 22.04. Πριν από την εγκατάσταση, ενημερώσαμε πρώτα το σύστημά μας. Το σύστημα απαιτούσε το δικαίωμα sudo για να ενημερωθεί με την εντολή apt.








Για να αποκτήσει δικαιώματα sudo, το τερματικό ζήτησε τον έλεγχο ταυτότητας από τον χρήστη sudo. Στη συνέχεια, ενημερώστε τα πακέτα συστήματος και τις εξαρτήσεις τους, όπως φαίνεται παρακάτω.




Τώρα, έχουμε εγκαταστήσει το πλαίσιο CUnit χρησιμοποιώντας την ακόλουθη εντολή. Αυτή η εντολή μπορεί να εγκαταστήσει τα πακέτα libcunitl, libcunitl-doc και libcunitl-dev από το αποθετήριο πακέτων.




Μόλις εκτελεστεί η εντολή εγκατάστασης CUnit, απαιτείται ο κωδικός πρόσβασης χρήστη. Τα βασικά πακέτα CUnit έχουν εγκατασταθεί στο Ubuntu 22.04 μας.





Παράδειγμα 1

Ολοκληρώσαμε το βήμα εγκατάστασης του πλαισίου CUnit στην προηγούμενη ενότητα. Τώρα, δοκιμάσαμε τη μέθοδο αθροίσματος και διαφοράς για να δούμε τα αναμενόμενα αποτελέσματα στο ακόλουθο παράδειγμα χρησιμοποιώντας το πλαίσιο δοκιμής CUnit.



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

int init_suite ( κενός ) { ΕΠΙΣΤΡΟΦΗ 0 ; }
int clean_suite ( κενός ) { ΕΠΙΣΤΡΟΦΗ 0 ; }

int MySum ( εισαι a1, εισαι b1 )

{
int res1;
res1 =a1+b1;
ΕΠΙΣΤΡΟΦΗ res1;
}

στο MyDiff ( int a2, int b2 )

{
int res2;
res2 =a2-b2;
ΕΠΙΣΤΡΟΦΗ res2;
}

void test_MySum ( κενός )
{
WITH_ASSERT ( 4 ==Το άθροισμά μου ( δύο , δύο ) ) ;
WITH_ASSERT ( 8 ==Το άθροισμά μου ( 5 , 3 ) ) ;
WITH_ASSERT ( δύο ==Το άθροισμά μου ( - δύο , 4 ) ) ;
WITH_ASSERT ( 7 ==Το άθροισμά μου ( 0 , 7 ) ) ;
}


void test_MyDiff ( κενός )
{
WITH_ASSERT ( 3 ==MyDiff ( 5 , δύο ) ) ;
WITH_ASSERT ( - 4 ==MyDiff ( 4 , 8 ) ) ;
WITH_ASSERT ( - 7 ==MyDiff ( - 3 , 4 ) ) ;
WITH_ASSERT ( - 9 ==MyDiff ( 0 , 9 ) ) ;
}


int main ( κενός )
{

CU_pSuite pSuite1,pSuite2 = NULL;

αν ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;

pSuite1 = CU_add_suite ( 'Test Suite 1' , init_suite, clean_suite ) ;
αν ( NULL == pSuite1 ) {
CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}

αν ( ( NULL == CU_add_test ( pSuite1, ' \n \n Έλεγχος συνάρτησης αθροίσματος \n \n ' , test_MySum ) ) )
{
CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}

αν ( ( NULL == CU_add_test ( pSuite1, ' \n \n Δοκιμή συνάρτησης διαφοράς \n \n ' , test_MyDiff ) ) )
{
CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}

CU_basic_run_tests ( ) ;

CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}







Αρχικά, για να δημιουργήσουμε τη δομή CUnit, έχουμε εισαγάγει τη βιβλιοθήκη CUnit 'CUnit/Basic.h' με τη λέξη-κλειδί που περιλαμβάνεται. Αυτή η βιβλιοθήκη C είναι για πλαίσια δοκιμής μονάδων και προσφέρει μια απλή διεπαφή εξόδου κονσόλας. Στη συνέχεια προσθέσαμε δύο συναρτήσεις, το “init_suite” για την προετοιμασία της συνάρτησης σουίτας και το “clean_suite” για τον καθαρισμό της συνάρτησης σουίτας, στο πρόγραμμά μας για δοκιμή.

Στη συνέχεια, κατασκευάσαμε μεθόδους, «MySum» και «MyDiff», που θα δοκιμαστούν από το CUnit. Έχουμε καλέσει τον κατασκευαστή για αυτές τις συναρτήσεις, ο οποίος περιέχει τις μεταβλητές στις οποίες έχουν εκτελεστεί οι πράξεις αθροίσματος και διαφοράς. Στη συνέχεια, δημιουργήσαμε μια συνάρτηση ως 'test_MySum' για δοκιμή. Μέσα στη συνάρτηση, έχουμε χρησιμοποιήσει τη μέθοδο «CU_ASSERT», όπου εκχωρούνται οι αρχικές εκφράσεις για το άθροισμα. Όπως και το 'test_MySum', έχουμε κατασκευάσει τη συνάρτηση test_MyDiff για να δοκιμάσουμε την έκφραση για διαφορετικές λειτουργίες χρησιμοποιώντας τη μέθοδο 'CU_ASSERT'.

Στη συνέχεια, έχουμε τον κωδικό εκτέλεσης CUnit μέσα στην κύρια μέθοδο. Εδώ, δημιουργήσαμε δύο σουίτες, 'pSuite1' και 'pSuite2', από τη μέθοδο 'CU_pSuite' και εκχωρήσαμε σε αυτές τις σουίτες μια τιμή NULL. Δημιουργήσαμε αυτές τις σουίτες για να εκτελέσουμε τη δοκιμή CUnit που πρέπει να καταχωρηθεί στο μητρώο δοκιμών. Πριν προσθέσουμε τις σουίτες στο 'test_registry', δημιουργήσαμε το μητρώο και το αρχικοποιήσαμε με το 'if condition'. Χρησιμοποιήσαμε τη μέθοδο 'CU_initialze_registry()' για τη δημιουργία του μητρώου για τη δοκιμή σουιτών.

Μετά από αυτό, προσθέσαμε το pSuite1 στο μητρώο δοκιμών επικαλούμενοι τη μέθοδο 'CU_add_suite' του CUnit. Μετά από αυτό, προσθέσαμε τις δοκιμές μας, 'test_MySum' και 'test_MyDiff', στις καθορισμένες σουίτες χρησιμοποιώντας τη μέθοδο 'CU_add_test()'. Στο τέλος, εμφανίσαμε τα αποτελέσματα της δοκιμής CUnit καλώντας τη μέθοδο 'CU_basic_run_tests()' και καθαρίσαμε το μητρώο μόλις εμφανιστούν με επιτυχία τα αποτελέσματα. Το σφάλμα που παρουσιάστηκε κατά την εκτέλεση των δοκιμών CUnit θα απορριφθεί από τη συνάρτηση 'CU_get_error()'.

Το προηγούμενο αρχείο δοκιμής CUnit αποθηκεύεται ως αρχείο mytest.c. Έχουμε εκτελέσει αυτό το αρχείο C με την εντολή GCC. Χρησιμοποιήσαμε τη σημαία -lcunit για την εκτέλεση του αρχείου δοκιμής CUnit. Με αυτήν την εντολή, ο κώδικάς μας μεταγλωττίζεται. Στη συνέχεια, εκτελέσαμε το αρχείο mytest και έδειξε τα αναμενόμενα αποτελέσματα της δοκιμής CUnit καθώς όλα τα τεστ πέρασαν χωρίς καμία αποτυχία.

Παράδειγμα 2

Έχουμε ένα άλλο παράδειγμα όπου έχουμε δοκιμάσει τις δύο μεθόδους χειρισμού αρχείων, 'fread' και 'fprintf', με την προσέγγιση CUnit. Ανοίξαμε και κλείσαμε το προσωρινό αρχείο χρησιμοποιώντας τις λειτουργίες δοκιμής CUnit. Οι λειτουργίες δοκιμής CUnit ελέγχουν τις λειτουργίες της βιβλιοθήκης γράφοντας και διαβάζοντας από το προσωρινό αρχείο.

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

στατικό ΑΡΧΕΙΟ * αρχείο = NULL;
int init_suite1 ( κενός )
{
αν ( NULL == ( αρχείο = φώπω ( 'MyFile.txt' , 'w +' ) ) ) {
ΕΠΙΣΤΡΟΦΗ -1 ;
}
αλλού {
ΕΠΙΣΤΡΟΦΗ 0 ;
}
}

int clean_suite1 ( κενός )
{
αν ( 0 ! = fclose ( αρχείο ) ) {
ΕΠΙΣΤΡΟΦΗ -1 ;
}
αλλού {
αρχείο = NULL;
ΕΠΙΣΤΡΟΦΗ 0 ;
}
}


void test_fprintf ( κενός )
{
int x1 = 10 ;

αν ( ΜΗΔΕΝΙΚΟ ! = αρχείο ) {
WITH_ASSERT ( δύο == fprintf ( αρχείο , 'Ερ \n ' ) ) ;
WITH_ASSERT ( 7 == fprintf ( αρχείο , 'x1 = %d' , x1 ) ) ;
}
}

void test_fread ( κενός )
{
ανυπόγραφο buffer χαρακτήρων [ είκοσι ] ;

αν ( ΜΗΔΕΝΙΚΟ ! = αρχείο ) {
επανατύλιξη ( αρχείο ) ;
WITH_ASSERT ( 9 == fread ( buffer, μέγεθοςof ( ανυπόγραφο χαρ ) , είκοσι , αρχείο ) ) ;
WITH_ASSERT ( 0 == strncmp ( ρυθμιστής, 'Ερ \n x1 = 10' , 9 ) ) ;
}
}

int main ( )
{
CU_pSuite pSuite = NULL;
αν ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
pSuite = CU_add_suite ( 'Σουίτα 1' , init_suite1, clean_suite1 ) ;
αν ( NULL == pSuite ) {
CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}
αν ( ( NULL == CU_add_test ( psuite, 'Fprintf() Test function' , test_fprintf ) ) ||
( NULL == CU_add_test ( psuite, 'Τεστ συνάρτησης fread()' , test_fread ) ) )
{
CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}
CU_basic_set_mode ( CU_BRM_VERBOSE ) ;
CU_basic_run_tests ( ) ;
CU_cleanup_registry ( ) ;
ΕΠΙΣΤΡΟΦΗ CU_get_error ( ) ;
}







Μέσα στο αρχείο κεφαλίδας, έχουμε ορίσει την τυπική βιβλιοθήκη CUnit “CUnit.h/Basic.h”. Στη συνέχεια, δηλώσαμε 'αρχείο' ως δείκτη στο αρχείο που χρησιμοποιείται από τις δοκιμές. Στη συνέχεια, κατασκευάσαμε τη συνάρτηση 'init_suite1' που ανοίγει το προσωρινό αρχείο 'MyFile.txt' και επιστρέφει την τιμή μηδέν στην επιτυχία. Διαφορετικά, θα επιστραφεί μια μη μηδενική τιμή. Για να κλείσουμε το αρχείο, δημιουργήσαμε τη συνάρτηση καθαρισμού σουίτας, η οποία επιστρέφει επίσης μια μη μηδενική τιμή σε περίπτωση αποτυχίας κατά το κλείσιμο του προσωρινού αρχείου. Διαφορετικά, με το επιτυχές κλείσιμο του προσωρινού αρχείου, λαμβάνεται μηδενική τιμή. Στη συνέχεια, έχουμε απλώς εφαρμόσει μια συνάρτηση 'test_fprintf' όπου έχουμε εισαγάγει τα δεδομένα στο προσωρινό αρχείο 'MYfile.txt'. Αυτές οι δοκιμαστικές συναρτήσεις επαλήθευσαν επίσης τον αριθμό των byte που προσπαθήσαμε να γράψουμε στο αρχείο.

Μετά από αυτό, δημιουργήσαμε μια άλλη συνάρτηση για τη συνάρτηση 'test_fread' για να δοκιμάσουμε τη μέθοδο fread. Εδώ, ελέγξαμε ότι οι καθορισμένοι χαρακτήρες υπάρχουν στα προηγουμένως γραμμένα δεδομένα από τη συνάρτηση 'test_fprinf()'. Στη συνέχεια, έχουμε την κύρια συνάρτηση όπου γίνεται ο χειρισμός των δοκιμών που ρυθμίζονται και εκτελούνται. Ορίσαμε το 'pSuite' στην κύρια συνάρτηση και αρχικοποιήσαμε το μητρώο χρησιμοποιώντας τη συνάρτηση δοκιμής 'CU_initialize_resgistry'. Καλέσαμε επίσης τη συνάρτηση 'CU_add_suite' για να προσθέσουμε τη σουίτα στο μητρώο και προσθέσαμε τις καθορισμένες δοκιμές στις σουίτες με τη βοήθεια της συνάρτησης 'CU_add_test'.

Οι βασικές διεπαφές δοκιμής CUnit χρησιμοποιούνται στο τέλος για την εμφάνιση των αποτελεσμάτων του κώδικα. Σημειώστε ότι η κύρια συνάρτηση επιστρέφει ένα 'CUE_SUCCESS' κατά την επιτυχή εκτέλεση και έναν διαφορετικό κωδικό 'CUnit_error' σε περίπτωση αποτυχίας εκτέλεσης.

Έχουμε τρέξει τον προηγούμενο κώδικα για τη δοκιμή CUnit, ο οποίος εμφάνιζε τη σύνοψη του προγράμματος και το μήνυμα μεθόδου επιτυχών δοκιμών.

συμπέρασμα

Το CUnit είναι ένα βασικό πλαίσιο που παρέχει διάφορες διεπαφές χρήστη. Μας επιτρέπει να διαχειριζόμαστε σειρές δοκιμών, υποθέσεις δοκιμών και μητρώα δοκιμών. Η δοκιμή των προγραμμάτων και η προβολή των αποτελεσμάτων αυτών των δοκιμών γίνεται ευκολότερη από τις διεπαφές χρήστη. Καλύψαμε το πλαίσιο δοκιμής CUnit στο C με αυτό το άρθρο. Επιδείξαμε την εγκατάσταση και στη συνέχεια εφαρμόσαμε δύο προγράμματα που εκτελούνται σε γλώσσα C. Τα προηγούμενα προγράμματα που δοκιμάστηκαν έδωσαν επιτυχή αποτελέσματα.