2013-05-18 9 views
10

मैं Google के मॉकिंग फ्रेमवर्क से परिचित होने की कोशिश कर रहा हूं, इसलिए मैं अपने सी ++ विकास में कुछ टीडीडी को आसानी से लागू कर सकता हूं। मेरे पास निम्न इंटरफ़ेस है:Google मॉक विनाशक

#include <string> 

class Symbol { 
public: 
    Symbol (std::string name, unsigned long address) {} 
    virtual ~Symbol() {} 
    virtual std::string getName() const = 0; 
    virtual unsigned long getAddress() const = 0; 
    virtual void setAddress(unsigned long address) = 0; 
}; 

मैं यह सत्यापित करना चाहता हूं कि एक उदाहरण हटा दिए जाने पर विनाशक को बुलाया जाता है।

#include "gmock/gmock.h" 
#include "symbol.h" 

class MockSymbol : public Symbol { 
    public: 
     MockSymbol(std::string name, unsigned long address = 0) : 
      Symbol(name, address) {} 
     MOCK_CONST_METHOD0(getName, std::string()); 
     MOCK_CONST_METHOD0(getAddress, unsigned long()); 
     MOCK_METHOD1(setAddress, void(unsigned long address)); 
     MOCK_METHOD0(Die, void()); 
     virtual ~MockSymbol() { Die(); } 
}; 

नोट:: तो मैं निम्नलिखित MockSymbol वर्ग है मैं हटा दिया है उपरोक्त में गार्ड शामिल हैं, लेकिन वे मेरी हेडर फाइल में हैं।

मैं उस बिंदु पर नहीं पहुंच पाया जहां मैं वास्तव में कुछ भी परीक्षण कर रहा हूं।

#include "gmock/gmock.h" 
#include "MockSymbol.h" 

TEST(SymbolTableTests, DestructorDeletesAllSymbols) { 
    ::testing::FLAGS_gmock_verbose = "info"; 
    MockSymbol *mockSymbol = new MockSymbol("mockSymbol"); 
    EXPECT_CALL(*mockSymbol, Die()); 
} 

जब मैं अपने परीक्षण धावक पर अमल, मेरे दूसरे परीक्षण निष्पादित और के रूप में मैं उन्हें करने की उम्मीद पारित: मैं निम्नलिखित है।

SymbolTableTests.cpp:: 11: हालांकि, जब ऊपर परीक्षण निष्पादित करता है मैं निम्नलिखित त्रुटि मिलती है EXPECT_CALL (* mockSymbol, मरो()) लागू विभाजन गलती (कोर फेंक दिया)

मैं पिछले खर्च किया है Google को खोजने में कुछ घंटे और विभिन्न चीजों की कोशिश कर रहे हैं, लेकिन इसका लाभ उठाने के लिए। क्या किसी के पास कोई सुझाव है?

+0

'Die()' या किसी अन्य मॉक किए गए तरीकों के लिए निर्दिष्ट कोई (डिफ़ॉल्ट) क्रिया नहीं है ... –

+0

[दस्तावेज़ीकरण] के अनुसार निर्दिष्ट (https://code.google.com/p/googlemock/wiki/ CheatSheet # Setting_Default_Actions), मुझे एक डिफ़ॉल्ट क्रिया निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि मेरी सभी विधियां आदिम प्रकारों में से एक का उपयोग करती हैं। क्या मैं कुछ भूल रहा हूँ? –

+4

मैं विंडोज 7 पर सिग्विन चला रहा हूं। कुछ खुदाई के बाद, मैंने पाया कि मेरी बिल्ड कॉन्फ़िगरेशन में gtest_disable_pthreads को चालू करने से समस्या हल हो जाती है। –

उत्तर

4

मुझे पता चला कि मेरी बिल्ड कॉन्फ़िगरेशन में gtest_disable_pthreads को चालू करने से समस्या हल हो जाती है।

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