यूनिट परीक्षण C कोड [बंद]


853

मैंने सीधे सी में लिखे इस समर में एक एम्बेडेड सिस्टम पर काम किया। यह एक मौजूदा प्रोजेक्ट था, जिस कंपनी के लिए मैं काम करता था। मैं JUnit का उपयोग करके जावा में इकाई परीक्षण लिखने के लिए काफी आदी हो गया हूं, लेकिन मौजूदा कोड (जो कि रिफैक्टिंग की आवश्यकता है) के साथ-साथ सिस्टम में नए कोड को लिखने के लिए सबसे अच्छा तरीका है।

क्या कोई परियोजनाएं हैं जो यूनिट परीक्षण सादे सी कोड को यूनिट परीक्षण के रूप में आसान बनाती हैं? कोई भी अंतर्दृष्टि जो विशेष रूप से एम्बेडेड विकास (आर्म-लाइनक्स प्लेटफॉर्म को क्रॉस-संकलन) पर लागू होगी, बहुत सराहना की जाएगी।



2
@zmo - सॉफ्टवेयर सिफारिशें प्राप्त करने के लिए सॉफ्टवेयर अनुशंसाएँ स्टैक एक्सचेंज साइट है। मैंने इसका उपयोग नहीं किया है, इसलिए मैं यह नहीं कह सकता कि यह कितना अच्छा है। वहां पोस्ट करने से पहले आपको उनके पोस्टिंग नियमों की जांच करनी चाहिए।
जोनाथन लेफ़लर

जवाबों:


495

सी में एक इकाई परीक्षण ढांचा जाँच है ; सी में इकाई परीक्षण ढांचे की एक सूची यहां पाई जा सकती है और नीचे पुन: प्रस्तुत की जाती है। आपके रनटाइम में कितने मानक पुस्तकालय कार्य करते हैं, इसके आधार पर, आप उनमें से किसी एक का उपयोग करने में सक्षम हो सकते हैं या नहीं।

AceUnit

AceUnit (उन्नत C और एंबेडेड यूनिट) अपने आप को एक आरामदायक C कोड यूनिट टेस्ट फ्रेमवर्क के रूप में प्रस्तुत करता है। यह JUnit 4.x की नकल करने की कोशिश करता है और इसमें प्रतिबिंब जैसी क्षमताएं शामिल हैं। AceUnit का उपयोग संसाधन की कमी वाले वातावरण में किया जा सकता है, जैसे एम्बेडेड सॉफ़्टवेयर विकास, और महत्वपूर्ण रूप से यह उन वातावरणों में ठीक चलता है जहाँ आप एक भी मानक हेडर फ़ाइल को शामिल नहीं कर सकते हैं और ANSI / ISO C पुस्तकालयों से एक भी मानक C फ़ंक्शन को आमंत्रित नहीं कर सकते हैं। इसमें विंडोज पोर्ट भी है। यह संकेतों को फंसाने के लिए कांटे का उपयोग नहीं करता है, हालांकि लेखकों ने इस तरह की सुविधा को जोड़ने में रुचि व्यक्त की है। AceUnit होमपेज देखें ।

जीएनयू ऑटोनिट

चेक के समान लाइनों के साथ-साथ, एक अलग एड्रेस स्पेस में यूनिट टेस्ट चलाने के लिए फोर्किंग सहित (वास्तव में, चेक के मूल लेखक ने GNU ऑटोनिट से विचार उधार लिया है)। जीएनयू ऑटोनिट जीलिब का बड़े पैमाने पर उपयोग करता है, जिसका अर्थ है कि लिंकिंग और इस तरह के विशेष विकल्पों की आवश्यकता है, लेकिन यह आपके लिए एक बड़ी समस्या नहीं हो सकती है, खासकर यदि आप पहले से ही जीटीके या जीएलआईबी का उपयोग कर रहे हैं। GNU ऑटोऑनिट होमपेज देखें ।

Cunit

इसके अलावा GLib का उपयोग करता है, लेकिन यूनिट परीक्षणों के पता स्थान की सुरक्षा के लिए कांटा नहीं करता है।

Cunit

Win32 GUI कार्यान्वयन के लिए योजनाओं के साथ मानक सी। वर्तमान में कांटा या अन्यथा इकाई परीक्षणों के पते की जगह की रक्षा नहीं करता है। शुरुआती विकास में। CUnit होमपेज देखें ।

सबसे प्यारे

सिर्फ एक .c और एक .h फ़ाइल के साथ एक साधारण ढांचा जिसे आप अपने स्रोत के पेड़ में गिराते हैं। CuTest होमपेज देखें ।

CppUnit

सी ++ के लिए प्रमुख इकाई परीक्षण रूपरेखा; आप इसका उपयोग C कोड का परीक्षण करने के लिए भी कर सकते हैं। यह स्थिर है, सक्रिय रूप से विकसित है, और इसमें GUI इंटरफ़ेस है। C के लिए CppUnit का उपयोग न करने के प्राथमिक कारण यह हैं कि यह काफी बड़ा है, और दूसरा आपको C ++ में अपने परीक्षण लिखने होंगे, जिसका अर्थ है कि आपको C ++ कंपाइलर की आवश्यकता है। यदि ये चिंता की तरह नहीं हैं, तो यह निश्चित रूप से विचार करने लायक है, अन्य सी ++ यूनिट परीक्षण रूपरेखाओं के साथ। CppUnit होमपेज देखें ।

embUnit

एम्बुनेट (एंबेडेड यूनिट) एम्बेडेड सिस्टम के लिए एक और यूनिट टेस्ट फ्रेमवर्क है। यह ऐसा प्रतीत होता है जैसे AceUnit द्वारा अलंकृत किया गया हो। एंबेडेड यूनिट होमपेज

MinUnit

मैक्रोज़ का एक न्यूनतम सेट और यह बात है! बिंदु यह दिखाना है कि यूनिट कोड का परीक्षण करना कितना आसान है। MinUnit होमपेज देखें ।

मि। एंडो के लिए क्युनीट

एक घन कार्यान्वयन जो काफी नया है, और स्पष्ट रूप से अभी भी प्रारंभिक विकास में है। मिस्टर एंडो मुखपृष्ठ के लिए CUnit देखें ।

यह सूची अंतिम बार मार्च 2008 में अपडेट की गई थी।

अधिक रूपरेखा:

CMocka

CMocka नकली वस्तुओं के समर्थन के साथ C के लिए एक परीक्षण रूपरेखा है। इसका उपयोग और सेटअप करना आसान है।

CMocka होमपेज देखें ।

मापदंड

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

देखें मानदंड होमपेज पर अधिक जानकारी के लिए।

HWUT

HWUT, सी के लिए बहुत समर्थन के साथ एक सामान्य यूनिट टेस्ट टूल है। यह मेकफाइल्स बनाने में मदद कर सकता है, बड़े पैमाने पर परीक्षण मामलों को कम से कम 'चलना तालिकाओं' में कोडित कर सकता है, राज्य मशीनों के साथ चल सकता है, सी-स्टब्स और अधिक उत्पन्न कर सकता है। सामान्य दृष्टिकोण बहुत ही अनूठा है: Verdicts 'अच्छा stdout / bad stdout' पर आधारित है। तुलनात्मक कार्य हालांकि, लचीला है। इस प्रकार, किसी भी प्रकार की स्क्रिप्ट का उपयोग जाँच के लिए किया जा सकता है। यह किसी भी भाषा पर लागू किया जा सकता है जो मानक उत्पादन कर सकता है।

HWUT मुखपृष्ठ देखें ।

CGreen

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

उन सभी विशेषताओं (और अधिक) को CGreen मैनुअल में समझाया गया है

विकिपीडिया, इकाई परीक्षण रूपरेखाओं की सूची के तहत C इकाई परीक्षण ढाँचों की एक विस्तृत सूची देता है : C


प्रारंभ में, चेक बहुत ठोस दिखता है। मुझे यह देखना होगा कि वास्तविक उपयोग की आग के बीच यह कैसे चलता है ... लेकिन यह निश्चित रूप से ऐसा लगता है कि यह बिल फिट हो सकता है।
पॉल ओसबोर्न

8
हम अपने एम्बेडेड सिस्टम पर यूनिट टेस्टिंग कोड के लिए चेक का उपयोग करते हैं। अधिकांश भाग के लिए चेक एक अच्छा विकल्प था, लेकिन अब हम यूक्लिनक्स पर चलने वाले सिस्टम पर काम कर रहे हैं और चूंकि चेक को कांटा की आवश्यकता होती है, इसलिए यह उन सिस्टमों पर काम नहीं करता है। : /
डेविड होल्म

1
@labyrinth २००२ से उबंटू तारीखों में से एक है। सबसे वर्तमान संस्करण इस वर्ष (२०१४ से इस टिप्पणी के अनुसार) है। मुझे इसे स्रोत से संकलित करना था।
बैरी ब्राउन

4
HWUT रिमोट-कंट्रोलेबल स्टब्स जेनरेट करता है जो कि बहुत काम आता है अगर आप ऐसे मॉड्यूल्स के लिए टेस्ट लिखना चाहते हैं जो हार्डवेयर्स के साथ इंटरैक्ट करते हैं। वे ड्राइवर, ज्यादातर मामलों में एक पीसी पर मौजूद नहीं होते हैं। एचडब्ल्यूयूट डॉक्यूमेंटेशन
फ्रैंक-रेने

1
चेक के जीथूब पेज के अनुसार , नवीनतम संस्करण 17 दिसंबर 2016 को 0.11.0जारी किया गया है ।
मंदीप संधू

164

व्यक्तिगत रूप से मुझे Google टेस्ट ढांचा पसंद है

सी कोड के परीक्षण में वास्तविक कठिनाई बाहरी मॉड्यूल पर निर्भरता को तोड़ रही है ताकि आप इकाइयों में कोड को अलग कर सकें। यह विशेष रूप से समस्याग्रस्त हो सकता है जब आप विरासत कोड के आसपास परीक्षण करने की कोशिश कर रहे हों। इस मामले में मैं अक्सर परीक्षण में स्टब फ़ंक्शंस का उपयोग करने के लिए लिंकर का उपयोग करके खुद को पाता हूं।

यह वह है जो लोग " सीम " के बारे में बात करते हैं । सी में आपका एकमात्र विकल्प वास्तव में प्री-प्रोसेसर या लिंकर का उपयोग करना है ताकि आपकी निर्भरता का मज़ाक उड़ाया जा सके।

मेरी सी परियोजनाओं में से एक में एक विशिष्ट परीक्षण सूट इस तरह लग सकता है:

#include "myimplementationfile.c"
#include <gtest/gtest.h>

// Mock out external dependency on mylogger.o
void Logger_log(...){}

TEST(FactorialTest, Zero) {
    EXPECT_EQ(1, Factorial(0));
}

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

कोड को क्रॉस-कंपाइल करने के लिए, इसके लिए आपको लक्ष्य पर अच्छी सुविधाओं की आवश्यकता होती है। मैंने एक पावरपीसी आर्किटेक्चर पर लिनक्स पर संकलित गोगोलेस्ट क्रॉस के साथ ऐसा किया है। यह समझ में आता है क्योंकि आपके परिणामों को इकट्ठा करने के लिए आपके पास एक पूर्ण शेल और ओएस है। कम समृद्ध वातावरण के लिए (जो कि मैं पूर्ण ओएस के बिना कुछ भी वर्गीकृत करता हूं) आपको बस होस्ट पर निर्माण और चलाना चाहिए। आपको इसे वैसे भी करना चाहिए ताकि आप परीक्षण को निर्माण के हिस्से के रूप में स्वचालित रूप से चला सकें।

मुझे लगता है कि परीक्षण C ++ कोड आम तौर पर इस तथ्य के कारण बहुत आसान है कि OO कोड सामान्य रूप से प्रक्रियात्मक की तुलना में बहुत कम युग्मित है (बेशक यह कोडिंग शैली पर बहुत अधिक निर्भर करता है)। इसके अलावा C ++ में आप कोड पर निर्भरता इंजेक्शन और मेथड प्राप्त करने के लिए ओवरराइडिंग जैसे तरीकों का उपयोग कर सकते हैं जो अन्यथा एनकैप्सुलेटेड हैं।

माइकल फेयर्स के पास विरासत कोड के परीक्षण के बारे में एक उत्कृष्ट पुस्तक है । एक अध्याय में वह गैर-ओओ कोड से निपटने के लिए तकनीकों को शामिल करता है जिसकी मैं अत्यधिक अनुशंसा करता हूं।

संपादित करें : मैंने GitHub पर उपलब्ध स्रोत के साथ इकाई परीक्षण प्रक्रियात्मक कोड के बारे में एक ब्लॉग पोस्ट लिखा है

संपादित करें : व्यावहारिक प्रोग्रामर्स से एक नई पुस्तक निकल रही है जो विशेष रूप से यूनिट टेस्टिंग सी कोड को संबोधित करती है जिसकी मैं अत्यधिक अनुशंसा करता हूं


17
प्राग न खरीदें। पुस्तक इसमें ऐसी कोई अंतर्दृष्टि नहीं है जो इस प्रश्न के उत्तर में नहीं है।
फिल

3
मुझे पता है कि C और C ++ में बहुत अधिक ओवरलैप है, लेकिन यह मुझे C ++ टेस्टिंग लाइब्रेरी का उपयोग करने के लिए एक अच्छे विचार के रूप में हड़ताल नहीं करता है जब आप कोड का उत्पादन कर रहे हैं जो अंततः एक सी कंपाइलर में संकलित किया जाएगा।
राफेल अल्मेडा

2
@ RafaelAlmeida संक्षेप में मैं सहमत हूँ, मैं यहाँ जो दिखा रहा हूँ वह सी को लपेटे बिना एक प्रीप्रोसेसर सीम है जिसमें एक एक्सटर्नल सी शामिल है। इसके बावजूद कि मुझे व्यवहार में टेस्ट वर्णन भाषा के रूप में सी ++ काफी आसान लगी। मैंने परीक्षण के लिए एक सी आधारित रूपरेखा भी लिखी है, इसलिए मैं इस बारे में हठधर्मिता नहीं कर रहा हूँ :-) github.com/meekrosoft/fff
mikelong

@ पील आई असहमत। मुझे यह पुस्तक बहुत मूल्यवान
लगी

जैसा कि ऊपर कहा गया है, एचएएल कार्यों का मजाक उड़ाने के लिए मैं फेक फंक्शन फ्रेमवर्क का उपयोग कर रहा हूं। यह gTest के साथ बहुत अच्छी तरह से काम करता है। github.com/meekrosoft/fff
लियोनार्डो

135

Minunit एक अविश्वसनीय रूप से सरल इकाई परीक्षण ढांचा है। मैं इकाई परीक्षण c microcontroller कोड के लिए avr के लिए इसका उपयोग कर रहा हूँ।


5
मुझे एम्बेडेड सिस्टम करने का कोई अनुभव नहीं है इसलिए मैं उस पर टिप्पणी नहीं कर सकता, लेकिन छोटे सी कार्यक्रमों (स्कूलवर्क, स्क्रिप्ट) के लिए यह सही लगता है। बढ़िया लिंक।
एंड्रयूस्क

3
@toasted_flakes मैंने इसे एक गीथबिस्ट
सैम

इससे पहले कि मैं यहाँ खोजना शुरू करूँ, यह मेरे बहुत करीब है! मैं परीक्षण को स्वचालित करना चाहता हूं ताकि TEST (funcname, body) फ़ंक्शन का निर्माण करे और फ़ंक्शन को एक पॉइंटर स्टोर करे, लेकिन ऐसा लगता है कि मुझे कुछ बाहरी प्रसंस्करण की आवश्यकता होगी।
बेन कुशिगियन

41

मैं वर्तमान में CuTest यूनिट टेस्ट फ्रेमवर्क का उपयोग कर रहा हूं:

http://cutest.sourceforge.net/

यह एम्बेडेड सिस्टम के लिए आदर्श है क्योंकि यह बहुत हल्का और सरल है। मुझे लक्ष्य मंच के साथ-साथ डेस्कटॉप पर काम करने में कोई समस्या नहीं थी। इकाई परीक्षण लिखने के अलावा, सभी आवश्यक है:

  • जहां भी आप CuTest रूटीन कॉल कर रहे हैं, उसमें एक हेडर फ़ाइल शामिल है
  • छवि में संकलित / लिंक करने के लिए एक अतिरिक्त 'सी' फ़ाइल
  • यूनिट परीक्षणों को सेट करने और कॉल करने के लिए कुछ सरल कोड मुख्य में जोड़े गए हैं - मेरे पास यह केवल एक विशेष मुख्य () फ़ंक्शन में है जो कि संकलित किया जाता है यदि निर्माण के दौरान UNITTEST परिभाषित किया गया हो।

सिस्टम को एक ढेर और कुछ stdio कार्यक्षमता (जो सभी एम्बेडेड सिस्टम नहीं है) का समर्थन करने की आवश्यकता है। लेकिन कोड इतना सरल है कि आप शायद उन आवश्यकताओं के लिए विकल्प में काम कर सकते हैं यदि आपका मंच उनके पास नहीं है।

बाहरी "C" {} ब्लॉक के कुछ विवेकपूर्ण उपयोग के साथ यह C ++ के ठीक परीक्षण का भी समर्थन करता है।


1
मैं CuTest के लिए वोट दूंगा। मैं इसे Nintendo DS पर होमब्रेव के विकास के लिए उपयोग कर रहा हूं और इसे स्थापित करने या इसका उपयोग करने में कोई कठिनाई नहीं हुई है।
थेरॉन

मैं यह तीसरा हूँ। मैंने इसे तब डाउनलोड किया जब यह संस्करण 1.4 था और इसे एक्सएमएल में डंप करने के लिए संशोधित किया। ऐसा लगता है कि एक संस्करण 1.5 है जिसे मुझे डाउनलोड करना होगा और देखना होगा।
टेलर प्राइस

2
क्यूटेस्ट ने क्यूएनएक्स सिस्टम पर चलने वाले कोड का परीक्षण करने के लिए मेरे लिए अच्छा काम किया है।
जैस ब्राउनिंग

यह JUnit की तरह काम करने का दावा करता है, लेकिन मुझे लगता है कि याद आती है Beforeऔर Afterकॉल करता है। सब सब में, यह प्यारा है।
ड्रैगस

40

मैं लगभग चूहा के रूप में ही कहता हूं, लेकिन अगर आपके पास इकाई परीक्षणों के लिए एक एम्बेडेड मोड़ है तो ...

एकता - इकाई परीक्षण सी कोड के लिए अत्यधिक अनुशंसित रूपरेखा।

एम्बेडेड थ्रेड के लिए इस थ्रेड TDD में उल्लिखित पुस्तक के उदाहरण एकता (और CappUTest) का उपयोग करके लिखे गए हैं।


5
CMock का उपयोग करके स्वचालित मॉक जेनरेशन के साथ संयुक्त एकता काफी अच्छी है।
thegreendroid

क्या आप cmock के लिए कुछ अच्छे ट्यूटोरियल सुझा सकते हैं?
मेल्विन_जॉज

: वहाँ CMock और एकता के लिए एक बहुत अच्छा ट्यूटोरियल, Ceedling द्वारा ऑर्केस्ट्रेटेड है dmitryfrank.com/articles/unit_testing_embedded_c_applications
दिमित्री फ्रैंक

35

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

एक उदाहरण:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}

मैंने अपने स्वयं के प्रोजेक्ट्स के लिए अपने स्वयं के libtap-समकक्ष को हाथ से लुढ़काया, लेकिन अब जब मुझे पता है कि यह मौजूद है, तो मुझे अब और नहीं बनाए रखना होगा। ठंडा!
अपराह्न

1
ok(TESTING==IsSimple(), "libtap is super easy to use")
एशेल्ली

26

Cmocka नामक नकली वस्तुओं के समर्थन के लिए C के लिए एक सुरुचिपूर्ण इकाई परीक्षण रूपरेखा है । इसके लिए केवल मानक सी लाइब्रेरी की आवश्यकता होती है, कंप्यूटिंग प्लेटफार्मों (एम्बेडेड सहित) की एक श्रृंखला पर और विभिन्न संकलक के साथ काम करता है।

इसमें अलग-अलग संदेश आउटपुट प्रारूपों जैसे कि सबयूनिट, टेस्ट एनीथिंग प्रोटोकॉल और ज्यूनिट एक्सएमएल रिपोर्ट का भी समर्थन है।

cmocka को एम्बेडेड प्लेटफार्मों पर काम करने के लिए भी बनाया गया है और इसमें विंडोज समर्थन भी है।

एक साधारण परीक्षण इस तरह दिखता है:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}

एपीआई पूरी तरह से प्रलेखित है और कई उदाहरण स्रोत कोड का हिस्सा हैं।

Cmocka के साथ आरंभ करने के लिए आपको LWN.net पर लेख पढ़ना चाहिए: C में नकली वस्तुओं के साथ इकाई परीक्षण

cmocka 1.0 फरवरी 2015 को जारी किया गया है।


3
जब मैं cmockery और cmocka को देखता हूं तो प्रलेखन समान दिखता है। क्या ये परियोजनाएं संबंधित हैं?
मैट फ्रेडमैन

6
cmocka cmockery का उत्तराधिकारी है। मैंने कांटा लगा दिया है क्योंकि यह अस्वाभाविक है।
ASN

21

इससे पहले कि मैं मॉक फ़ंक्शंस का तरीका ढूंढना शुरू करूँ, मुझे एक विरासत सी एप्लिकेशन का परीक्षण करने में दिक्कत नहीं हुई। मुझे सी फ़ाइल को दूसरों से अलग करने के लिए मुझे बुरी तरह से नकली की आवश्यकता थी। मैंने cmock को एक कोशिश दी और मुझे लगता है कि मैं इसे अपना लूंगा।

Cmock हेडर फ़ाइलों को स्कैन करता है और इसे मिलने वाले प्रोटोटाइप के आधार पर नकली कार्यों को उत्पन्न करता है। मोक्स आपको सही अलगाव में एक सी फ़ाइल का परीक्षण करने की अनुमति देगा। आपको बस इतना करना होगा कि अपनी वास्तविक फ़ाइल फ़ाइलों के बजाय अपनी परीक्षण फ़ाइल को मोक्स से जोड़ना है।

सेमीकॉक का एक और फायदा यह है कि यह नकली कार्यों के लिए दिए गए मापदंडों को मान्य करेगा, और यह आपको यह निर्दिष्ट करने देगा कि नकली क्या मूल्य प्रदान करते हैं। अपने कार्यों में निष्पादन के विभिन्न प्रवाह का परीक्षण करने के लिए यह बहुत उपयोगी है।

टेस्ट में विशिष्ट टेस्टा (), टेस्टबी () फ़ंक्शन शामिल होते हैं जिसमें आप उम्मीदों का निर्माण करते हैं, एस्कॉर्ट्स की जांच करने और जांचने के लिए कॉल फ़ंक्शन करते हैं।

अंतिम चरण एकता के साथ अपने परीक्षणों के लिए एक धावक उत्पन्न करना है। Cmock एकता परीक्षण ढांचे से बंधा हुआ है। एकता किसी अन्य इकाई परीक्षण ढांचे के रूप में सीखना आसान है।

अच्छी तरह से लायक एक कोशिश और समझ में आसान:

http://sourceforge.net/apps/trac/cmock/wiki

अपडेट १

एक और ढांचा जिसकी मैं जांच कर रहा हूं, वह है Cmockery।

http://code.google.com/p/cmockery/

यह एक शुद्ध C फ्रेमवर्क सपोर्टिंग यूनिट टेस्टिंग और मॉकिंग है। यह माणिक (Cmock के विपरीत) पर कोई निर्भरता नहीं है और बाहरी कार्यों पर इसकी बहुत कम निर्भरता है।

इसे मॉक्स सेटअप करने के लिए थोड़ा और मैनुअल काम करने की आवश्यकता है क्योंकि यह कोई कोड जेनरेशन नहीं है। किसी मौजूदा परियोजना के लिए बहुत सारे काम का प्रतिनिधित्व नहीं करता है क्योंकि प्रोटोटाइप बहुत ज्यादा नहीं बदलेगा: एक बार जब आपके पास आपके मोक्स होते हैं, तो आपको उन्हें थोड़ी देर के लिए बदलने की आवश्यकता नहीं होगी (यह मेरा मामला है)। अतिरिक्त टाइपिंग से मोक्स पर पूर्ण नियंत्रण मिलता है। अगर कोई ऐसी चीज है जो आपको पसंद नहीं है, तो आप बस अपना मजाक बदलें।

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

इसके अलावा इसमें कुछ निफ्टी सी ट्रिक्स हैं जो मुझे नहीं पता थे।

कुल मिलाकर Cmockery को आरंभ करने के लिए मोक्स की थोड़ी अधिक समझ की आवश्यकता है। इसे दूर करने में उदाहरणों की मदद करनी चाहिए। ऐसा लगता है कि यह सरल यांत्रिकी के साथ काम कर सकता है।


8
आपको cmocka.org पर एक नज़र डालनी चाहिए जो cmockery का उत्तराधिकारी है!
ASN

क्या आप cmock के लिए कुछ अच्छे ट्यूटोरियल सुझा सकते हैं?
मेल्विन_जोस

LWN लेख से शुरू करें और फिर cmocka के उदाहरण निर्देशिका की जाँच करें।
ASN

16

एक सी नौसिखिया के रूप में, मुझे सी में टेस्ट संचालित विकास नामक स्लाइड्स बहुत मददगार लगीं। असल में, यह मानक का उपयोग करता assert()के साथ एक साथ &&किसी भी बाहरी निर्भरता के बिना एक संदेश देने के लिए,। अगर किसी को पूर्ण स्टैक टेस्टिंग फ्रेमवर्क के लिए उपयोग किया जाता है, तो यह संभवतः नहीं करेगा :)


मैं is_spare () फ़ंक्शन में बग से बहुत परेशान था ... लेकिन लिंक के लिए धन्यवाद! मुझे लगता है कि TDD सभी बग्स को नहीं पकड़ता है।
जीस बेन

यह सी के लिए मैंने देखा सबसे सरल टीडीडी दृष्टिकोण है, जिसे आप assertबिना किसी अतिरिक्त पुस्तकालयों या ढांचे के साथ पालन कर सकते हैं । मुझे लगता है कि यदि आप सिर्फ एक नौसिखिया हैं, तो यह एक प्रारंभिक बिंदु हो सकता है।
काबिरैध्या

16

हमने आसान उपयोगिता और सुवाह्यता के लिए CHEAT ( GitHub पर होस्ट किया गया ) लिखा ।

इसकी कोई निर्भरता नहीं है और इसे किसी इंस्टॉलेशन या कॉन्फ़िगरेशन की आवश्यकता नहीं है। केवल हेडर फ़ाइल और टेस्ट केस की जरूरत होती है।

#include <cheat.h>

CHEAT_TEST(mathematics_still_work,
    cheat_assert(2 + 2 == 4);
    cheat_assert_not(2 + 2 == 5);
)

परीक्षण एक निष्पादन योग्य में संकलित होता है जो परीक्षणों को चलाने और उनके परिणामों की रिपोर्ट करने का ध्यान रखता है।

$ gcc -I . tests.c
$ ./a.out
..
---
2 successful of 2 run
SUCCESS

इसमें सुंदर रंग भी हैं।


सुंदर कॉलो (यू)
आरएस के लिए अपवोट

12

नहीं है Cunit

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

और टेसी एम्बेडेड सॉफ्टवेयर की इकाई परीक्षण को स्वचालित करता है।


1
मैंने कोशिश की embunitऔर इससे निराश था।
क्रेग मैकक्यून

1
उदाहरण के लिए मैंने एक बग रिपोर्ट प्रस्तुत की, साथ ही एक और बग रिपोर्ट जो 3 वर्षों के लिए अप्रयुक्त है।
क्रेग मैकक्यून

12

मैं एक फ्रेमवर्क का उपयोग नहीं करता, मैं सिर्फ ऑटोटूलस "चेक" लक्ष्य समर्थन का उपयोग करता हूं। एक "मुख्य" को लागू करें और मुखर का उपयोग करें।

मेरा परीक्षण मेक मेफाइल.म.

check_PROGRAMS = test_oe_amqp

test_oe_amqp_SOURCES = test_oe_amqp.c
test_oe_amqp_LDADD = -L$(top_builddir)/components/common -loecommon
test_oe_amqp_CFLAGS = -I$(top_srcdir)/components/common -static

TESTS = test_oe_amqp

2
हम ऑटोटूलस का उपयोग नहीं कर रहे हैं (हालांकि कुछ बिंदु पर आगे बढ़ना अच्छा होगा)। ऐतिहासिक रूप से, मैंने परीक्षण उद्देश्यों के लिए मुख्य विधि का उपयोग किया है और यह एक बुरा समाधान नहीं है।
पॉल ओसबोर्न

11

माइकल फेदर की पुस्तक "वर्किंग इफ़ेक्टली विद लिगेसी कोड" सी विकास के दौरान यूनिट परीक्षण के लिए विशिष्ट तकनीकों को प्रस्तुत करती है।

निर्भरता इंजेक्शन से संबंधित तकनीकें हैं जो सी के लिए विशिष्ट हैं जो मैंने कहीं और नहीं देखी हैं।


7

CppUTest - यूनिट परीक्षण C कोड के लिए अत्यधिक अनुशंसित रूपरेखा।

एम्बेडेड थ्रेड के लिए इस थ्रेड TDD में उल्लिखित पुस्तक के उदाहरण CppUTest का उपयोग करके लिखे गए हैं।


6

मैं एक एम्बेडेड c / c ++ वातावरण (मुख्य रूप से C ++) के लिए CxxTest का उपयोग करता हूं

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

जैसा कि पहले उल्लेख किया गया है कि यह C / C ++ इकाई परीक्षण ढांचा है। तो आपको C ++ कंपाइलर की आवश्यकता होगी।

CxxTest उपयोगकर्ता गाइड CxxTest विकी


संकलक जो आपको चाहिए वह c ++ हो सकता है लेकिन जिस कोड का आप परीक्षण कर रहे हैं वह अभी भी C. CxxTest उपयोग करने के लिए एक बहुत ही आसान ढांचा है
David Sykes


5

Minunit को पढ़ने के बाद मुझे लगा कि एक बेहतर तरीका आधार का परीक्षण था जो मैक्रो में रक्षात्मक प्रोग्राम तकनीक की तरह उपयोग करता है। इसलिए मैंने मिनुनिट के समान विचार का उपयोग मानक अभिकथन के साथ किया। आप k0ga के ब्लॉग में मेरा फ्रेमवर्क (एक अच्छा नाम NoMinunit हो सकता है) देख सकते हैं


अब मैं अपने प्रोजेक्ट में आपका उपयोग कर रहा हूं। ठीक काम करता है और काफी मददगार है। धन्यवाद!
जोहान



4

Google के पास उत्कृष्ट परीक्षण ढांचा है। https://github.com/google/googletest/blob/master/googletest/docs/primer.md

और हाँ, जहाँ तक मुझे लगता है कि यह सादे C के साथ काम करेगा, अर्थात C ++ फीचर्स की आवश्यकता नहीं है (C ++ कंपाइलर की आवश्यकता हो सकती है, निश्चित नहीं है)।


क्या Google की रूपरेखा शुद्ध C के साथ काम करेगी? पृष्ठ पर एक त्वरित नज़र यह C ++ फ्रेमवर्क का सुझाव देती है।
दाना

4
Google टेस्ट उत्कृष्ट है, लेकिन यह बहुत ही C ++ फ्रेमवर्क है। यह बहुत पोर्टेबल है और यदि आप को सी का परीक्षण करने के लिए इस्तेमाल किया जा सकता है।
जोश केली

4

Cmockery एक हाल ही में लॉन्च की गई परियोजना है जिसमें यूनिट टेस्ट लिखने के लिए C लाइब्रेरी का उपयोग करना बहुत सरल है।


आपको cmocka.org पर एक नज़र रखना चाहिए जो कि Cmockery का उत्तराधिकारी है।
ASN

3

सबसे पहले, यहाँ देखें: http://en.wikipedia.org/wiki/List_of_unit_testing_framits#C

मेरी कंपनी के पास एक सी लाइब्रेरी है जो हमारे ग्राहक उपयोग करते हैं। कोड का परीक्षण करने के लिए हम CxxTest (एक C ++ यूनिट टेस्ट लाइब्रेरी) का उपयोग करते हैं। CppUnit भी काम करेगा। यदि आप C में फंस गए हैं, तो मैं RCUNIT की अनुशंसा करूंगा (लेकिन CUnit बहुत अच्छा है)।


2

यदि आप JUnit से परिचित हैं तो मैं CppUnit की सलाह देता हूं। http://cppunit.sourceforge.net/cppunit-wiki

यह मानते हुए कि इकाई परीक्षण करने के लिए आपके पास c ++ संकलक है। यदि नहीं, तो मुझे एडम रोसेनफील्ड से सहमत होना होगा कि जाँच करें कि आप क्या चाहते हैं।


6
प्रश्न C के बारे में है, C ++ नहीं
1800 सूचना

3
नहीं, लेकिन C ++ C पुस्तकालयों के लिए इंटरफ़ेस कर सकता है। तो यह वास्तव में एक C ++ इकाई परीक्षण ढांचे का उपयोग करके C पुस्तकालयों का परीक्षण करने के लिए पूरी तरह से ठीक हो सकता है। (मेरी कंपनी उस तरह से बहुत काम करती है और यह सी यूनिट टेस्ट फ्रेमवर्क का उपयोग करने की तुलना में बहुत आसान है।)
केविन

मैं तो यही करता हूँ। हमारे पास C में लिखी एक यूटिलिटीज लाइब्रेरी है जिसका उपयोग हम अपने C ++ कोड और स्क्रिप्टिंग भाषाओं के नीचे करते हैं। हम परीक्षणों के लिए CppUnit का उपयोग करते हैं और यह बहुत अच्छी तरह से काम कर रहा है क्योंकि हम C और C ++ दोनों के लिए समान ढांचे का उपयोग कर सकते हैं।
जयान

2

मैंने लक्ष्य पर परीक्षण से पहले पीसी पर एम्बेडेड कोड के लिए कुछ यूनिट परीक्षण करने के लिए RCUNIT का उपयोग किया । अच्छा हार्डवेयर इंटरफ़ेस अमूर्तता महत्वपूर्ण है और अंतरण और मेमोरी मैप्ड रजिस्टर आपको मारने जा रहे हैं।


2

कोशिश करो! - http://code.google.com/p/lcut


3
कुछ प्रलेखन सहायक होगा। परियोजना की पृष्ठभूमि और लक्ष्य, एक फीचर सूची, मौजूदा विकल्पों पर लाभ, आदि ऐसे लोगों के लिए मददगार होंगे जो पहली बार इसकी जांच कर रहे हैं।
क्रेग मैकक्वीन

2

एपीआई सनिटी परीक्षक - सी / सी ++ पुस्तकालयों के लिए परीक्षण रूपरेखा:

एक साझा C / C ++ लाइब्रेरी के लिए बुनियादी यूनिट परीक्षणों का एक स्वचालित जनरेटर। यह मानकों के लिए उचित (अधिकतर, लेकिन दुर्भाग्य से सभी, मामलों में) इनपुट डेटा उत्पन्न करने में सक्षम है और हेडर में घोषणाओं के विश्लेषण के माध्यम से एपीआई में हर फ़ंक्शन के लिए सरल ("पवित्रता" या "उथले" -क्वालिटी) परीक्षण मामलों की रचना करता है। फ़ाइलें।

उत्पन्न परीक्षणों की गुणवत्ता सरल उपयोग के मामलों में महत्वपूर्ण त्रुटियों की अनुपस्थिति की जांच करने की अनुमति देती है। उपकरण जनरेट किए गए परीक्षणों को बनाने और निष्पादित करने में सक्षम है और क्रैश (segfaults), एबॉर्ट्स, सभी प्रकार के उत्सर्जित संकेतों, गैर-शून्य प्रोग्राम रिटर्न कोड और प्रोग्राम हैंगिंग का पता लगाने में सक्षम है।

उदाहरण:


1

उपयोग करने के लिए एक तकनीक C मॉड्यूल के रूप में लक्ष्य प्रणाली के लिए स्रोत बनाए रखते हुए, C ++ xUnit फ्रेमवर्क (और C ++ कंपाइलर) के साथ यूनिट टेस्ट कोड विकसित करने के लिए है।

सुनिश्चित करें कि आप नियमित रूप से अपने क्रॉस-कंपाइलर के तहत अपने सी स्रोत को संकलित करते हैं, यदि संभव हो तो अपने यूनिट परीक्षणों के साथ स्वचालित रूप से।


1

LibU ( http://koanlogic.com/libu) ) में एक इकाई परीक्षण मॉड्यूल है जो स्पष्ट परीक्षण सूट / केस निर्भरता, परीक्षण अलगाव, समानांतर निष्पादन और एक अनुकूलन योग्य रिपोर्ट फ़ॉर्मेटर (डिफ़ॉल्ट प्रारूप xml और txt) की अनुमति देता है।

पुस्तकालय बीएसडी लाइसेंस प्राप्त है और इसमें कई अन्य उपयोगी मॉड्यूल शामिल हैं - नेटवर्किंग, डिबगिंग, आमतौर पर उपयोग किए जाने वाले डेटा संरचनाएं, कॉन्फ़िगरेशन, आदि - क्या आपको अपनी परियोजनाओं में उनकी आवश्यकता होनी चाहिए ...


1

मुझे आश्चर्य है कि किसी ने भी कटर (http://cutter.sourceforge.net/) का उल्लेख नहीं किया है आप C और C ++ का परीक्षण कर सकते हैं, यह मूल रूप से ऑटोटूल के साथ एकीकृत होता है और वास्तव में एक अच्छा ट्यूटोरियल उपलब्ध है।



0

यदि आप अभी भी परीक्षण ढांचे के लिए शिकार पर हैं, तो Winn32 / NT प्लेटफॉर्म के लिए CUnitWin32 एक है।

यह एक मौलिक समस्या का हल करता है जिसका मुझे अन्य परीक्षण रूपरेखाओं के साथ सामना करना पड़ा। प्रत्येक वैश्विक / स्थिर चर एक निर्धारक स्थिति में होते हैं क्योंकि प्रत्येक परीक्षण को एक अलग प्रक्रिया के रूप में निष्पादित किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.