2012-12-23 4 views
16

के लिए यूनिट परीक्षणों को संकलित करते समय अनसुलझा बाहरी दृश्य मैं दृश्य सी ++ प्रोजेक्ट के लिए यूनिट परीक्षण बनाना चाहता हूं। मैंने these MSDN instructions का पालन करने की कोशिश की। मुझे ऐसे पृष्ठ मिल गए हैं जहां वे अप्रबंधित/मिश्रित/शुद्ध कोड के बीच अंतर करते हैं, लेकिन मैं उन अवधारणाओं को पूरी तरह से समझ नहीं पा रहा हूं। मेरा कोड .NET का उपयोग नहीं करता है और कुछ कोड समायोजन के साथ MinGW के तहत संकलित होने की संभावना है।विजुअल सी ++ 2012

मेरा मुख्य प्रोजेक्ट निष्पादन योग्य बनाता है, इसलिए मैंने के तहत दिए गए चरणों का पालन किया परीक्षण परियोजना से निर्यात किए गए कार्यों का संदर्भ देने के लिए।

मैं मूल निवासी यूनिट टेस्ट परियोजना साथ चला गया: शुरुआत के लिए मैं अलग परियोजना विकल्प मिला है। मैंने अपने मुख्य प्रोजेक्ट का संदर्भ जोड़ा और मैंने को से $(SolutionDir)\Cubes;$(IncludePath) पर निर्देशित किया। मैं अपने कोड लिखा था और यह मिल गया जब संकलन:

1>Creating library C:\Users\Pieter\Dropbox\Unief\TTUI\TTUIproject\Cubes\Debug\CubesTest.lib and object C:\Users\Pieter\Dropbox\Unief\TTUI\TTUIproject\Cubes\Debug\CubesTest.exp 
1>LayoutTest.obj : error LNK2019: unresolved external symbol "public: __thiscall Room::Room(void)" ([email protected]@[email protected]) referenced in function "public: void __thiscall CubesTest::LayoutTest::NumOfRoomsConsistency(void)" ([email protected]@[email protected]@QAEXXZ) 
1>LayoutTest.obj : error LNK2019: unresolved external symbol "public: __thiscall Layout::Layout(class Room *,int)" ([email protected]@[email protected]@@[email protected]) referenced in function "public: void __thiscall CubesTest::LayoutTest::NumOfRoomsConsistency(void)" ([email protected]@[email protected]@QAEXXZ) 
1>LayoutTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall Layout::add(int,int,class Room *)" ([email protected]@@[email protected]@@Z) referenced in function "public: void __thiscall CubesTest::LayoutTest::NumOfRoomsConsistency(void)" ([email protected]@[email protected]@QAEXXZ) 
1>LayoutTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall Layout::clear(int,int,bool)" ([email protected]@@[email protected]) referenced in function [email protected]@[email protected]@QAEXXZ$0 
1>C:\Users\Pieter\Dropbox\Unief\TTUI\TTUIproject\Cubes\Debug\CubesTest.dll : fatal error LNK1120: 4 unresolved externals 

अगर मैं गलत नहीं हूँ, इसका मतलब है कि संकलक हेडर फाइल, लेकिन नहीं स्रोत फ़ाइलें पाता है। मैं क्या खो रहा हूँ?

+1

नहीं, यह मतलब है कि ** लिंकर ** अपने संदर्भित प्रतीक वाले बाइनरी नहीं मिल रहा है। – SomeWittyUsername

+0

ठीक है, मैं लिंकर को कैसे कहूं कि आवश्यक फाइलें कहां मिलें? मैंने सफलतापूर्वक [यह] (http://i.imgur.com/jitTd.png) सफलतापूर्वक कोशिश की है। – Pieter

+0

यह चाल करना चाहिए। यह भी सुनिश्चित करें कि आप * वास्तव में * अपनी फ़ाइलों वाली सभी परियोजनाओं को संकलित करें (निर्भरता की जांच करें) – SomeWittyUsername

उत्तर

14

यहां एक चरण-दर-चरण विवरण है कि एक इकाई-परीक्षण लक्ष्य के रूप में EXE को कैसे जोड़ा जाए।

मुख्य बिंदु उन कार्यों/वर्गों को "निर्यात" करना है जिन्हें आप परीक्षण करना चाहते हैं ... आप यहां पूरा नमूना डाउनलोड कर सकते हैं: http://blog.kalmbachnet.de/files/CPP_UnitTestApp.zip (मैंने किसी भी प्रोजेक्ट सेटिंग्स को नहीं बदला है, इसलिए स्रोत में आप जो भी परिवर्तन देख सकते हैं -कोड; बेशक, कुछ हिस्सों को परियोजना सेटिंग्स में बनाया जा सकता है)।

  1. Win32 एप्लिकेशन (कंसोल या एमएफसी या विंडोज़ कोई फर्क नहीं पड़ता) बनाएं; मैंने CPP_UnitTestApp नामक एक कंसोल प्रोजेक्ट बनाया:

  2. एक फ़ंक्शन जोड़ें जिसे आप परीक्षण करना चाहते हैं (आप कक्षाएं भी जोड़ सकते हैं)। उदाहरण के लिए:

    int Plus1(int i) 
    { 
        return i+1; 
    } 
    
  3. परीक्षण करने के लिए कार्य करता है आप चाहते हैं के लिए एक हेडर फाइल जोड़ें: CPP_UnitTestApp.h

  4. हेडर फाइल में तरीकों की घोषणा रखो, और भी इन कार्यों का निर्यात!

    #pragma once 
    
    #ifdef EXPORT_TEST_FUNCTIONS 
    
    #define MY_CPP_UNITTESTAPP_EXPORT __declspec(dllexport) 
    #else 
    #define MY_CPP_UNITTESTAPP_EXPORT 
    #endif 
    
    MY_CPP_UNITTESTAPP_EXPORT int Plus1(int i); 
    
  5. मुख्य-सीपीपी (यहाँ CPP_UnitTestApp.cpp) में इस हेडर फाइल को शामिल करें और हैडर शामिल करने से पहले EXPORT_TEST_FUNCTIONS को परिभाषित:

    #define EXPORT_TEST_FUNCTIONS 
    #include "CPP_UnitTestApp.h" 
    
  6. अब एक नई परियोजना को जोड़ने (मूल निवासी इकाई परीक्षण परियोजना :

    : UnitTest1)

  7. शीर्षक और "unittest1.cpp" फाइल करने के लिए lib (पथ को अपनाने के रूप में आप चाहते हैं) शामिल करें

  8. परीक्षण प्रोजेक्ट की प्रोजेक्ट सेटिंग्स पर जाएं, "यूनिटटेस्ट 1" प्रोजेक्ट (प्रोजेक्ट | प्रॉपर्टीज | कॉमन प्रॉपर्टीज) में एक संदर्भ जोड़ें। नया संदर्भ जोड़ें ...: "परियोजनाओं" "CPP_UnitTestApp" -Project)

  9. इकाई परीक्षण समारोह बनाएं तहत चयन करें:

    TEST_METHOD(TestMethod1) 
    { 
        int res = Plus1(12); 
        Assert::AreEqual(13, res); 
    } 
    
  10. अपने इकाई परीक्षण चलाने के लिए;)

आप देख सकते हैं, मुख्य बिंदु समारोह घोषणा को निर्यात करना था! यह __declspec(dllexport) के माध्यम से किया जाता है भले ही यह एक EXE है।

जैसा कि मैंने कहा, डेमो परियोजना यहाँ डाउनलोड किया जा सकता है: http://blog.kalmbachnet.de/files/CPP_UnitTestApp.zip

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