C . में CUnit

C Mem Cunit



CUnit प्रणाली का उपयोग C में इकाई परीक्षण करने के लिए किया जाता है, जो परीक्षण के प्रशासन और निष्पादन के लिए सक्षम बनाता है। यह आमतौर पर उपयोग किए जाने वाले डेटा प्रकारों के परीक्षण के लिए विविध प्रकार के दावे शामिल करता है और परीक्षण संरचना बनाने के लिए एक सरल वास्तुकला का उपयोग करता है। उपयोगकर्ता का परीक्षण कोड CUnit से जुड़ा हुआ है, जिसे एक स्थिर पुस्तकालय के रूप में डिज़ाइन किया गया है। हम CUnit परीक्षण ढांचे का उपयोग करके C प्रोग्राम के कार्यों और कार्यों के प्रदर्शन की जांच कर सकते हैं। C प्रोग्राम के प्रत्येक विशेष कार्य में अलग-अलग इनपुट परिस्थितियाँ और आउटपुट सीमाएँ होती हैं। C प्रोग्राम के परीक्षण के लिए CUnit का उपयोग करने के लिए, हमें इसे पहले अपने सिस्टम में स्थापित करना चाहिए। CUnit को स्थापित करने के चरण नीचे दिए गए हैं।

Ubuntu 22.04 में CUnit फ्रेमवर्क का उपयोग कैसे करें?

हमारे सिस्टम में CUnit परीक्षण ढांचे का उपयोग करने के लिए, हमें स्थापना चरणों का पालन करने की आवश्यकता है। ये चरण उबंटू 22.04 सिस्टम पर लागू होते हैं। स्थापना से पहले, हमने सबसे पहले अपने सिस्टम को अपडेट किया। उपयुक्त कमांड के साथ अद्यतन होने के लिए सिस्टम को sudo विशेषाधिकार की आवश्यकता होती है।








सुडो विशेषाधिकार प्राप्त करने के लिए, टर्मिनल ने सुडो उपयोगकर्ता से प्रमाणीकरण के लिए कहा। फिर, सिस्टम संकुल और उनकी निर्भरता को अद्यतन करें, जैसा कि नीचे दिखाया गया है।




अब, हमने निम्नलिखित कमांड का उपयोग करके CUnit फ्रेमवर्क स्थापित किया है। यह कमांड पैकेज रिपॉजिटरी से libcunitl, libcunitl-doc, और libcunitl-dev संकुल को संस्थापित कर सकता है।




एक बार CUnit इंस्टालेशन कमांड निष्पादित हो जाने के बाद, उपयोगकर्ता पासवर्ड की आवश्यकता होती है। CUnit आवश्यक पैकेज हमारे Ubuntu 22.04 में स्थापित किए गए हैं।





उदाहरण 1

हमने पिछले खंड में CUnit ढांचे के स्थापना चरण को पूरा किया। अब, हमने CUnit परीक्षण ढांचे का उपयोग करके निम्नलिखित उदाहरण में अपेक्षित परिणाम देखने के लिए योग और अंतर विधि का परीक्षण किया है।



#शामिल करें
#शामिल करें
#शामिल करें
#शामिल करें
#शामिल 'CUnit/Basic.h'

int init_suite ( शून्य ) { वापसी 0 ; }
इंट क्लीन_सुइट ( शून्य ) { वापसी 0 ; }

int MySum ( आप a1 हैं, आप b1 हैं )

{
इंट रेस1;
रेस1 =ए1+बी1;
वापसी रेस1;
}

int MyDiff ( इंट ए2, इंट बी2 )

{
इंट रेस2;
रेस2 =a2-b2;
वापसी रेस2;
}

शून्य परीक्षण_माईसम ( शून्य )
{
WITH_ASSERT ( 4 ==माईसम ( दो , दो ) ) ;
WITH_ASSERT ( 8 ==माईसम ( 5 , 3 ) ) ;
WITH_ASSERT ( दो ==माईसम ( - दो , 4 ) ) ;
WITH_ASSERT ( 7 ==माईसम ( 0 , 7 ) ) ;
}


शून्य परीक्षण_माईडिफ ( शून्य )
{
WITH_ASSERT ( 3 ==माईडिफ ( 5 , दो ) ) ;
WITH_ASSERT ( - 4 ==माईडिफ ( 4 , 8 ) ) ;
WITH_ASSERT ( - 7 ==माईडिफ ( - 3 , 4 ) ) ;
WITH_ASSERT ( - 9 ==माईडिफ ( 0 , 9 ) ) ;
}


मुख्य प्रवेश बिंदु ( शून्य )
{

CU_pSuite pSuite1,pSuite2 = NULL;

यदि ( CUE_SUCCESS ! = CU_initialize_registry ( ) )
वापसी CU_get_error ( ) ;

pSuite1 = CU_add_suite ( 'टेस्ट सूट1' , init_suite, clean_suite ) ;
यदि ( नल == pSuite1 ) {
CU_cleanup_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}

यदि ( ( नल == CU_add_test ( pSuite1, ' \एन \एन योग फलन परीक्षण \एन \एन ' , परीक्षण_माईसम ) ) )
{
CU_cleanup_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}

यदि ( ( नल == CU_add_test ( pSuite1, ' \एन \एन अंतर समारोह परीक्षण \एन \एन ' , test_MyDiff ) ) )
{
CU_cleanup_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}

CU_basic_run_tests ( ) ;

CU_cleanup_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}







सबसे पहले, CUnit संरचना उत्पन्न करने के लिए, हमने शामिल कीवर्ड के साथ CUnit लाइब्रेरी 'CUnit/Basic.h' को सम्मिलित किया है। यह सी पुस्तकालय इकाई परीक्षण ढांचे के लिए है और एक साधारण कंसोल आउटपुट इंटरफ़ेस प्रदान करता है। फिर हमने परीक्षण के लिए अपने कार्यक्रम में सूट फ़ंक्शन के आरंभीकरण के लिए 'init_suite' और सूट फ़ंक्शन की सफाई के लिए 'क्लीन_सुइट' दो फ़ंक्शन जोड़े।

इसके बाद, हमने CUnit द्वारा परीक्षण किए जाने वाले तरीकों, 'MySum' और 'MyDiff' का निर्माण किया। हमने इन फ़ंक्शंस के लिए कंस्ट्रक्टर को बुलाया है, जिसमें वेरिएबल्स हैं जिन पर योग और डिफरेंस ऑपरेशन किए गए हैं। इसके बाद, हमने परीक्षण करने के लिए 'test_MySum' के रूप में एक फ़ंक्शन स्थापित किया है। फ़ंक्शन के अंदर, हमने 'CU_ASSERT' पद्धति को नियोजित किया है, जहां योग के लिए init भाव असाइन किए गए हैं। 'Test_MySum' के समान, हमने 'CU_ASSERT' विधि का उपयोग करके विभिन्न कार्यों के लिए अभिव्यक्ति का परीक्षण करने के लिए test_MyDiff फ़ंक्शन का निर्माण किया है।

फिर, हमारे पास मुख्य विधि के अंदर CUnit रनर कोड है। यहां, हमने 'CU_pSuite' पद्धति से दो सूट, 'pSuite1' और 'pSuite2' बनाए हैं और इन सुइट्स को एक NULL मान दिया है। हमने इन सुइट्स को CUnit परीक्षण निष्पादित करने के लिए बनाया है जिसे परीक्षण रजिस्ट्री में पंजीकृत किया जाना चाहिए। सुइट्स को “Test_registry” में जोड़ने से पहले, हमने रजिस्ट्री बनाई और इसे “if condition” के साथ इनिशियलाइज़ किया। हमने परीक्षण सूट के लिए रजिस्ट्री बनाने के लिए 'CU_initialze_registry ()' विधि का उपयोग किया है।

उसके बाद, हमने CUnit की 'CU_add_suite' पद्धति को लागू करके परीक्षण रजिस्ट्री में pSuite1 को जोड़ा। उसके बाद, हमने 'CU_add_test ()' पद्धति का उपयोग करके अपने परीक्षण, 'test_MySum' और 'test_MyDiff' को निर्दिष्ट सूट में जोड़ा। अंत में, हमने 'CU_basic_run_tests ()' विधि को कॉल करके CUnit परीक्षण के परिणाम प्रदर्शित किए और परिणाम सफलतापूर्वक प्रदर्शित होने के बाद रजिस्ट्री को साफ कर दिया। CUnit परीक्षण करते समय आई त्रुटि 'CU_get_error ()' फ़ंक्शन द्वारा फेंक दी जाएगी।

पिछली CUnit परीक्षण फ़ाइल mytest.c फ़ाइल के रूप में सहेजी गई है। हमने इस सी फाइल को जीसीसी कमांड के साथ निष्पादित किया है। हमने CUnit परीक्षण फ़ाइल निष्पादन के लिए -lcunit ध्वज का उपयोग किया है। इस कमांड से हमारा कोड कंपाइल होता है। फिर, हमने mytest फ़ाइल को निष्पादित किया, और इसने CUnit परीक्षण के अपेक्षित परिणाम दिखाए क्योंकि सभी परीक्षण बिना किसी विफलता के पारित किए गए थे।

उदाहरण 2

हमारे पास एक और उदाहरण है जहां हमने CUnit दृष्टिकोण द्वारा दो फ़ाइल हैंडलिंग विधियों, 'फ़्रेड' और 'fprintf' का परीक्षण किया है। हमने CUnit परीक्षण फ़ंक्शन का उपयोग करके अस्थायी फ़ाइल को खोला और बंद किया। CUnit परीक्षण संचालन अस्थायी फ़ाइल से लिखने और पढ़ने के द्वारा पुस्तकालय के कार्यों का परीक्षण करता है।

#शामिल करें
#शामिल करें
#शामिल करें
#शामिल करें
#शामिल 'CUnit/Basic.h'

स्थिर फ़ाइल * फ़ाइल = नल;
int init_suite1 ( शून्य )
{
यदि ( नल == ( फ़ाइल = फॉपेन ( 'MyFile.txt' , 'डब्ल्यू +' ) ) ) {
वापसी -1 ;
}
वरना {
वापसी 0 ;
}
}

इंट क्लीन_सुइट1 ( शून्य )
{
यदि ( 0 ! = fclose ( फ़ाइल ) ) {
वापसी -1 ;
}
वरना {
फ़ाइल = नल;
वापसी 0 ;
}
}


शून्य परीक्षण_फप्रिंटफ ( शून्य )
{
इंट x1 = 10 ;

यदि ( शून्य ! = फ़ाइल ) {
WITH_ASSERT ( दो == एफप्रिंटफ ( फ़ाइल , 'क्यू \एन ' ) ) ;
WITH_ASSERT ( 7 == एफप्रिंटफ ( फ़ाइल , 'X1 = %d' , x1 ) ) ;
}
}

शून्य परीक्षण_फ़्रेड ( शून्य )
{
अहस्ताक्षरित चार बफर [ बीस ] ;

यदि ( शून्य ! = फ़ाइल ) {
रिवाइंड ( फ़ाइल ) ;
WITH_ASSERT ( 9 == फ़्रेड ( बफर, आकार ( अचिन्हित वर्ण ) , बीस , फ़ाइल ) ) ;
WITH_ASSERT ( 0 == strncmp ( बफर, 'क्यू \एन x1 = 10' , 9 ) ) ;
}
}

मुख्य प्रवेश बिंदु ( )
{
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_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}
यदि ( ( नल == CU_add_test ( पी सूट, 'fprintf () फ़ंक्शन टेस्ट' , टेस्ट_फप्रिंटफ ) ) ||
( नल == CU_add_test ( पी सूट, 'फ़्रेड () फ़ंक्शन टेस्ट' , टेस्ट_फ़्रेड ) ) )
{
CU_cleanup_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}
CU_basic_set_mode ( CU_BRM_VERBOSE ) ;
CU_basic_run_tests ( ) ;
CU_cleanup_रजिस्ट्री ( ) ;
वापसी CU_get_error ( ) ;
}







हेडर फ़ाइल के भीतर, हमने CUnit मानक पुस्तकालय 'CUnit.h/Basic.h' को परिभाषित किया है। फिर, हमने 'फ़ाइल' को परीक्षणों द्वारा उपयोग की जाने वाली फ़ाइल के सूचक के रूप में घोषित किया। इसके बाद, हमने 'init_suite1' फ़ंक्शन का निर्माण किया है जो अस्थायी फ़ाइल 'MyFile.txt' को खोलता है और सफलता पर मान शून्य लौटाता है; अन्यथा, एक गैर-शून्य मान वापस कर दिया जाएगा। फ़ाइल को बंद करने के लिए, हमने सुइट क्लीनअप फ़ंक्शन बनाया है, जो अस्थायी फ़ाइल को बंद करते समय विफलता पर एक गैर-शून्य मान भी देता है। अन्यथा, अस्थायी फ़ाइल को सफलतापूर्वक बंद करने पर, शून्य मान प्राप्त होता है। फिर, हमने बस एक फ़ंक्शन 'test_fprintf' लागू किया है जहां हमने डेटा को अस्थायी फ़ाइल 'MYfile.txt' में डाला है। इन परीक्षण कार्यों ने उन बाइट्स की संख्या को भी सत्यापित किया जिन्हें हमने फ़ाइल में लिखने का प्रयास किया था।

उसके बाद, हमने फ़्रेड विधि का परीक्षण करने के लिए 'test_fread' फ़ंक्शन के लिए एक और फ़ंक्शन बनाया। यहां, हमने जांच की है कि निर्दिष्ट वर्ण 'test_fprinf ()' फ़ंक्शन द्वारा पहले लिखित डेटा में मौजूद हैं। फिर, हमारे पास मुख्य कार्य है जहां परीक्षण स्थापित और निष्पादित किए जाते हैं। हमने मुख्य फ़ंक्शन में 'pSuite' को परिभाषित किया और 'CU_initialize_resgistry' परीक्षण फ़ंक्शन का उपयोग करके रजिस्ट्री को प्रारंभ किया। हमने सुइट को रजिस्ट्री में जोड़ने के लिए 'CU_add_suite' फ़ंक्शन को भी बुलाया है और 'CU_add_test' फ़ंक्शन की सहायता से सुइट्स में निर्दिष्ट परीक्षण जोड़े हैं।

कोड के परिणाम प्रदर्शित करने के लिए मूल CUnit परीक्षण इंटरफेस का उपयोग अंत में किया जाता है। ध्यान दें कि मुख्य कार्य सफल निष्पादन पर 'CUE_SUCCESS' और असफल निष्पादन पर एक अलग 'CUnit_error' कोड देता है।

हमने CUnit परीक्षण के लिए पिछला कोड चलाया है, जो प्रोग्राम सारांश और सफल परीक्षण विधि संदेश प्रदर्शित करता है।

निष्कर्ष

CUnit एक कोर फ्रेमवर्क है जो विभिन्न यूजर इंटरफेस प्रदान करता है। यह हमें परीक्षण सूट, परीक्षण मामलों और परीक्षण रजिस्ट्रियों का प्रबंधन करने की अनुमति देता है। कार्यक्रमों का परीक्षण करना और उन परीक्षणों के परिणामों को देखना यूजर इंटरफेस द्वारा आसान बना दिया गया है। हमने इस लेख के साथ C में CUnit परीक्षण ढांचे को शामिल किया है। हमने इंस्टॉलेशन का प्रदर्शन किया और फिर C भाषा में दो रनिंग प्रोग्राम लागू किए। पिछले परीक्षण किए गए कार्यक्रमों ने सफल परिणाम दिए हैं।