22

के साथ "मेक चेक" के लिए परीक्षण कैसे बनाते हैं मैं किसी विशेष प्रोजेक्ट पर बिल्ड सिस्टम के लिए जीएनयू ऑटोोटूल का उपयोग कर रहा हूं। मैं सत्यापन के लिए स्वचालित परीक्षण लिखना शुरू करना चाहता हूं। मैं इसे स्वचालित रूप से चलाने के लिए "चेक करें" टाइप करना चाहता हूं। मेरी परियोजना सी ++ में है, हालांकि मैं अभी भी अन्य भाषाओं के लिए स्वचालित परीक्षण लिखने के बारे में उत्सुक हूं।आप जीएनयू ऑटोोटूल

क्या यह वहां से प्रत्येक यूनिट परीक्षण ढांचे के साथ संगत है (मैं cppunit का उपयोग करने के बारे में सोच रहा था)? मैं इन यूनिट परीक्षण ढांचे को चेक बनाने में कैसे लगा सकता हूं? क्या मैं यह सुनिश्चित कर सकता हूं कि मुझे शेष परियोजना को कॉन्फ़िगर करने और बनाने में सक्षम होने के लिए यूनिट टेस्ट सॉफ़्टवेयर स्थापित करने की आवश्यकता नहीं है?

उत्तर

21

परीक्षण रन बनाने के लिए जब आप make check जारी है, तो आप आप बस के लिए निष्पादन योग्य के नाम जोड़ने के लिए, उन्हें TESTS चर

में जोड़ने के लिए मान लिया जाये कि आप पहले से ही निष्पादन योग्य है कि इकाई परीक्षण चलाता है का निर्माण किया है की जरूरत है इस तरह चर परीक्षण:

TESTS=my-test-executable 

यह तो अपने आप make check, और अगर निष्पादन एक गैर शून्य मान देता है, यह है कि के रूप में एक परीक्षण विफलता रिपोर्ट करेंगे चलाने की जानी चाहिए। आप एक से अधिक इकाई परीक्षण निष्पादनयोग्य है, तो बस उन सब को TESTS चर में सूची:

TESTS=my-first-test my-second-test my-third-test 

और वे सब चलाने हो जाएगी।

+1

यदि आप उस माहौल को ट्विक करने की आवश्यकता है जिसमें आपके परीक्षण चलेंगे, उदाहरण के लिए PATH। आप TESTS_ENVIRONMENT चर का उपयोग करना चाहेंगे। – tmatth

4

आप पहले पैराग्राफ में 2 प्रश्न पूछ रहे हैं।

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

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

दूसरी समस्या के लिए, cppunit निर्भरता होने की इच्छा नहीं है, क्यों न केवल इसे अपने सी ++ एप्लिकेशन के साथ वितरित करें? क्या आप अपने स्रोत कोड के साथ जो भी संग्रह प्रारूप का उपयोग कर रहे हैं (इसे tar.gz, tar.bz2 या .zip) में सही तरीके से डाल सकते हैं। मैंने पहले भी CppUnit इस्तेमाल किया और इसके साथ खुश था, इस्तेमाल किया JUnit और अन्य XUnit शैली चौखटे होने गए हैं।

+0

किसी भी अंतर्दृष्टि: यह शायद आसान अभी भी check_PROGRAMS उपयोग करने के लिए लेकिन Makefile में एक स्थानीय नियम का उपयोग कर टेस्ट स्वीट आह्वान करने के लिए है? क्या आपको लगता है कि सवाल सीधे संबोधित नहीं किया गया था? –

8

मैं Check 0.9.10

configure.ac 
    Makefile.am 
    src/Makefile.am 
    src/foo.c 
    tests/check_foo.c 
    tests/Makefile.am 
  1. ./configure.ac

    PKG_CHECK_MODULES ([जांच] उपयोग कर रहा हूँ, [जाँच> = 0.9।10])

  2. परीक्षण कोड

    TESTS = check_foo 
    check_PROGRAMS = check_foo 
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h 
    check_foo_CFLAGS = @[email protected] 
    
  3. और परीक्षण कोड लिखने के लिए ./tests/Makefile.am, ./tests/check_foo.c

    START_TEST (test_foo) 
    { 
        ck_assert(foo() == 0); 
        ck_assert_int_eq(foo(), 0); 
    } 
    END_TEST 
    
    /// And there are some tcase_xxx codes to run this test 
    

का उपयोग करके आप जाँच टाइमआउट का उपयोग करें और संकेत बढ़ा सकते हैं। यह बहुत ही उपयोगी है।

0

आप check_PROGRAMS से जेनरेट किए गए प्रोग्राम चलाने के लिए ऑटोमैक के TESTS का उपयोग कर सकते हैं लेकिन यह मान लेंगे कि आप लॉग ड्राइवर और आउटपुट के लिए एक कंपाइलर का उपयोग कर रहे हैं। नीचे वोट में

check_PROGRAMS=testsuite 

testsuite_SOURCES=... 
testsuite_CFLAGS=... 
testsuite_LDADD=... 

check-local: 
    ./testsuite 
संबंधित मुद्दे