gmock

2012-02-13 17 views
12

के लिए नकली कक्षाओं की स्वत: पीढ़ी मैं जीएमॉकयूनिट परीक्षण C++ कोड के लिए उपयोग कर रहा हूं। मैं gtest ढांचे का उपयोग नहीं कर रहा हूं। मैं विजुअल स्टूडियो 2008 के अंतर्निर्मित परीक्षण ढांचे का उपयोग कर रहा हूं।gmock

अब मेरी समस्या यह है कि मुझे एक वास्तविक कक्षा के लिए यूनिट परीक्षण के लिए मैन्युअल रूप से नकली कक्षाएं लिखनी होंगी। उदाहरण के लिए यदि मेरे पास 5 कार्यों के साथ एक कक्षा है तो मुझे 5 कार्यों के साथ MockAClass लिखना होगा। क्या कोई तरीका है कि ये कक्षाएं स्वचालित रूप से जेनरेट की जाती हैं।

class AClass 
{ 
public: 
    virtual int AFunction() 
    { 
     return 5; 
    } 
    virtual int AFunctionWithArguments(int x) 
    { 
     return x; 
    } 



class MockAClass : public AClass 
{ 
public: 
    MOCK_METHOD0(AFucntion, int()); 
    MOCK_METHOD1(AFunctionWithArgument, int(int x)); 
}; 

उत्तर

18

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

यहाँ docs से जानकारी है:

युक्ति: यहां तक ​​कि यह आपके लिए बहुत ज्यादा काम है, तो आप गूगल मॉक की पटकथा/जनरेटर/निर्देशिका (शिष्टाचार में gmock_gen.py उपकरण मिल जाएगा cppclean प्रोजेक्ट) उपयोगी है। यह कमांड लाइन उपकरण आवश्यक है कि आपके पास पाइथन 2.4 स्थापित है। आप इसे एक सी ++ फ़ाइल और इसमें परिभाषित एक अमूर्त वर्ग का नाम देते हैं, और यह आपके लिए नकली कक्षा की परिभाषा मुद्रित करेगा। सी ++ भाषा की जटिलता के कारण, यह स्क्रिप्ट हमेशा काम नहीं कर सकती है, लेकिन यह बहुत आसान हो सकती है जब यह करता है। अधिक जानकारी के लिए, उपयोगकर्ता दस्तावेज पढ़ें।

यहां new localization of this script है।

+0

धन्यवाद, मैं इसका उपयोग करने की कोशिश करता हूं और उम्मीद करता हूं कि यह काम करता है, –

+0

इसके कामकाज। धन्यवाद। –

+1

यह निश्चित रूप से विंडोज पर काम करता है। मैं पाइथन 2.7 पर हूं और यह ठीक है। सामान्य चेतावनी हाथ tweaks के लिए आवेदन ... – rholmes

2

अस्वीकरण: यदि आप किसी अन्य उपकरण का उपयोग करने पर विचार किया मैं Typemock

पर काम करता था?
टाइपेमॉक में Isolator++ नामक एक उपकरण है जिसे आपको "मॉकिंग क्लासेस" लिखने की आवश्यकता नहीं है।

TEST_F(IsolatorTests, SomeTest) 
{ 
     AClass* fakeclass = FAKE(AClass); 
     WHEN_CALLED(fakeclass->AFunction()).Return(10); 

     ASSERT_EQ(10, fakeclass.AFunction()); 
} 

आप इस about page

+0

मैंने Isolator ++ के बारे में पढ़ा है। लेकिन यह मुफ़्त नहीं है। आपको इसके लिए लाइसेंस प्राप्त करना होगा। –

+1

हां - दुर्भाग्य से वे अपने कड़ी मेहनत के लिए पैसे चाहते हैं;) –

+3

@DrorHelper शायद एक अस्वीकरण के लायक है जिसे आप टाइपपेक के लिए काम करते थे। (ऐसा नहीं है कि यह एक बुरा उत्पाद आदि बनाता है, लेकिन पूर्वाग्रह के ऐसे संभावित स्रोतों का खुलासा करना अच्छा है)। –