2008-09-29 7 views
18

परीक्षण कैसे करें सी में परीक्षणों जैसे यूनिट-टेस्ट से आप कैसे प्रभावित करते हैं? कोड स्तर पर यूनिट-टेस्ट के रूप में आप कौन सा ढांचा तैयार करते हैं या करते हैं? मैक कुछ वे निर्मित की CPTest तरह कहा जाता है परसी कोड

+1

http://stackoverflow.com/questions/65820/unit-testing-c-code – mmcdole

उत्तर

2

XCode के लिए एक अच्छा परीक्षण रूपरेखा है। मैं एक पोर्टेबल संस्करण है कि मैं यहाँ

http://www.loufranco.com/blog/files/AppleCppUnitPort.html

मैं विंडोज पर जीसीसी को लक्षित किया गया था तैनात किया है, लेकिन मुझे लगता है इसे कहीं और काम करेंगे, और यह एक बहुत ही सरल ढांचे अगर आप कैसे ऐसी बात लागू करने के लिए देखना चाहता हूँ ।

0

आप www.xprogramming.com पर विशेष रूप से software लिंक पर कई सी यूनिट परीक्षण ढांचे पर जानकारी पा सकते हैं।

0

आप cfix पर एक नज़र रखना चाहते हैं - यह एक यूनिट परीक्षण फ्रेमवर्क है जो Win32 प्लेटफॉर्म और एनटी कर्नेल मोड के लिए विशिष्ट है। सी और सी ++ दोनों का समर्थन करता है।

0

आप अपने देव वातावरण के रूप में Windows का उपयोग कर रहे हैं, CUnitWin32 अपने उद्देश्य पूरा हो सकता है

16

व्यक्तिगत तौर पर मैं Google Test framework पसंद है।

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

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

मेरी सी परियोजनाओं में से एक में एक ठेठ टेस्ट स्वीट ऐसा दिख सकता है: कि आप वास्तव में सी फ़ाइल और नहीं हेडर फाइल भी शामिल कर रहे

#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)); 
} 

नोट। यह सभी स्थिर डेटा सदस्यों तक पहुंच का लाभ देता है। यहां मैं अपना लॉगर (जो कि logger.o में हो सकता है और एक खाली कार्यान्वयन दे सकता है। इसका मतलब है कि परीक्षण फ़ाइल शेष कोड बेस से स्वतंत्र रूप से संकलित और लिंक करती है और अलगाव में निष्पादित होती है।

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

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

माइकल फेदर के पास excellent book about testing legacy code है। एक अध्याय में वह गैर-ओओ कोड से निपटने के लिए तकनीकों को शामिल करता है जिसे मैं अत्यधिक अनुशंसा करता हूं।

संपादित: मैं इकाई के बारे में blog post प्रक्रियात्मक कोड का परीक्षण, source available on GitHub साथ लिखा है।