2009-09-17 16 views
7

के साथ क्रॉस संकलन इकाई परीक्षणों में से किसी ने एम्बेडेड प्लेटफ़ॉर्म पर चलाने के लिए C++ इकाई परीक्षणों को पार करने के लिए CppUnit जैसे पैकेज का उपयोग किया है?सीपीपीयूनीट या इसी तरह के

मैं लिनक्स बॉक्स पर चलने वाले निष्पादन योग्य संकलन करने के लिए एक लिनक्स बॉक्स पर जी ++ का उपयोग कर रहा हूं। मुझे यूनिट परीक्षण बनाने वाले कुछ को कॉन्फ़िगर करने और बनाने के लिए सामान्य यूनिट परीक्षण पैकेजों में से कोई भी प्रतीत नहीं होता है।

मुझे बहुत से यूनिट टेस्ट पैकेज, सीपीपीयूनीट, यूनिटटेस्ट ++, जीटीएस्ट, सीपीयूयूटीएस्ट इत्यादि दिखाई देते हैं, लेकिन क्रॉस-कंपाइलर परिदृश्य में इन पैकेजों का उपयोग करने के बारे में बहुत कम है। "कॉन्फ़िगर" स्क्रिप्ट वाले वाले लोगों का अर्थ यह है कि यह संभव है, लेकिन मैं उन्हें कॉन्फ़िगर और निर्माण करने के लिए प्रतीत नहीं कर सकता।

+0

मैं क्रॉस-कंपाइल प्रोजेक्ट में विंडोज और लिनक्स पर सीपीपीयूनीट का उपयोग कर रहा हूं। कोई समस्या नहीं है। आपकी सटीक समस्याएं क्या हैं? – tauran

उत्तर

2

आप CxxTest पर देख सकते हैं। मैंने इसे क्रॉस संकलन के लिए उपयोग नहीं किया है, लेकिन यह पूरी तरह से शीर्षलेखों और पायथन लिपि पर आधारित है - कोई संकलित लाइब्रेरी नहीं है। दूसरों की तुलना में अनुकूलित करना आसान हो सकता है।

2

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

इस दृष्टिकोण का एक अतिरिक्त लाभ यह है कि गैर-x86 एम्बेडेड लक्ष्यों के लिए, इस प्रकार का यूनिट परीक्षण अंतहीनता के मुद्दों, अनियमित चर और अन्य रोचक बगों को दूर करने में मदद करता है।

0

मैं यहां कोई जवाब नहीं दे रहा हूं, लेकिन मैं अलग-अलग लक्ष्यों पर अपने यूनिट परीक्षण नहीं चलाने की सलाह नहीं लेता: आपको अभी भी सिस्टम और यूनिट परीक्षण दोनों की आवश्यकता है।

अन्यथा एआरएम/अन्य एम्बेडेड CPU पर संरेखण त्रुटियों जैसी सरल चीजें पकड़ी नहीं जाएंगी।

0

ऐसा लगता है कि आपको अपने ओएस और आर्किटेक्चर के साथ-साथ आपके देव/निर्माण मशीन पर क्या यूनिट परीक्षण पुस्तकालय संकलित करने की आवश्यकता है। मैं इसके लिए बूस्ट ++ यूनिट टेस्ट फ्रेमवर्क पसंद करता हूं। आप या तो अपने आर्किटेक्चर के लिए प्रीबिल्ट कुछ ऐसा डाउनलोड कर सकते हैं, लेकिन आमतौर पर इसे स्वयं संकलित करना होगा। मुझे बूस्ट को संकलित करने के लिए googling द्वारा कुछ समाधान मिले (उदा। http://goodliffe.blogspot.com/2008/05/cross-compiling-boost.html)। CppUnit क्रॉस-संकलन करना आसान हो सकता है, कोशिश नहीं की है। सामान्य सिद्धांत वही है, आप अपने विकास आर्किटेक्चर के लिए एक ही लाइब्रेरी संस्करण संकलित करते हैं और अपनी लक्ष्य मशीन

नए लक्ष्य के लिए मेरा सेटअप मेरे लक्ष्य ओएस/आर्क के लिए आवश्यक बूस्ट ++ लाइब्रेरी को संकलित करना है और फिर लिंक करने के लिए परीक्षण लिखना है दोनों बूस्ट ++ पुस्तकालयों और कोड का परीक्षण करने के लिए।

लाभ यह है कि आप अपने x86 लिनक्स बूस्ट ++ libs के खिलाफ या अपने लक्ष्य बूस्ट ++ libs के विरुद्ध लिंक कर सकते हैं, इस प्रकार आप अपने लक्ष्य और अपनी dev/build machine दोनों पर परीक्षण चला सकते हैं।

मेरी सामान्य सेटअप इस तरह दिखता है:

libs/boost/<arch>/<boost libs> 
src/foo.{cpp,h} 
tests/test_foo.cpp 
build/foo 
build/test_foo.<arch> 

मैं अलग आर्किटेक्चर है कि मैं में अपने सभी परियोजनाओं के लिए libs/dir की जरूरत है और मेरे Makefiles में उन लोगों के libs संदर्भ के तहत संकलित रख बूस्ट ++ libs। स्रोत और परीक्षण कमांड बनाने के लिए निर्दिष्ट एक आर्क वैरिएबल के साथ बनाया जाता है जिससे मैं अपने dev मशीन और test_foo पर test_foo.x86 चला सकता हूं। {Arm, mips, ppc, आदि} मेरे लक्ष्यों पर।

3
./configure --prefix=/sandBox --build=`config.guess` --host=sh4-linux 

sh4-linux वह मंच है जहां आप प्रोग्राम को चलाने के लिए चाहते हैं।

0

CppUTest (v3.3) को पार करने के लिए, मुझे एलडी, सीईओक्स और सीसी को चर बनाने के लिए ओवरराइड करना पड़ा।

libCppUTest.a निर्माण करने के लिए:

make all LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

libCppUTestExt निर्माण करने के लिए

दोनों CppUTest और CppUTestExt पुस्तकालयों और उनके परीक्षण का निर्माण (CppUMock के लिए) मैं निम्न कमांड CPPUTEST_HOME निर्देशिका से इस्तेमाल किया पाने के लिए (CppUMock के लिए) .एक:

make extensions LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

तो आप कॉपी कर सकते हैं CppUTest_tests और CppUTestExt_tests निष्पादनयोग्य है कि आपके CPPUTEST_HOME में उत्पादित कर रहे हैं अपने लक्षित डिवाइस पर और उन्हें वहां निष्पादित करें।

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

संबंधित मुद्दे