2011-01-19 20 views
9

जीमेल का उपयोग करने के लिए जीमेल का उपयोग करके, मैं कैसे सत्यापित कर सकता हूं कि एक वर्ग के विनाशक को बुलाया जाता है? wrap it in another class के अलावा कोई रास्ता है?एक विनाशक कॉल

स्पष्ट विधि, EXPECT_CALL(object, ~classtype()) एक कंपाइलर त्रुटि उत्पन्न करती है (gmock gmock_~classtype नामक एक नकली विधि उत्पन्न नहीं कर सकता है)।

उत्तर

16

एक नाशक कॉल के लिए जाँच करने के लिए एक आसान तरीका है:

class MockFoo : public Foo { 
    ... 
    // Add the following two lines to the mock class. 
    MOCK_METHOD0(Die, void()); 
    virtual ~MockFoo() { Die(); } 
}; 

अपने परीक्षण समारोह में:

MockFoo* foo = new MockFoo; 
    ... 
    { 
    EXPECT_CALL(*foo, Die()); 
    } 

अधिक जानकारी यहां पाया जा सकता: Mocking Destructors

3

जब तक आप कर रहे हैं --gmock_catch_leaked_mocks=0 गुजरने के बाद, जब आप नकली को नष्ट करने में विफल रहते हैं तो gmock पहले से ही पता लगाना चाहिए। विनाशक वह जगह है जहां असंतुष्ट अपेक्षाओं को त्रुटियों के रूप में चिह्नित किया जाता है, इसलिए जब इसे कॉल नहीं किया जाता है तो इसका पता लगाने के लिए जीएमॉक का विशेष समर्थन होता है।

+0

एक चेतावनी है, हालांकि: जीएमक * लीक किए गए मोजे का पता नहीं लगाएगा जिनके पास उनके साथ कोई अपेक्षा नहीं है (ON_CALL/EXPECT_CALL)। ऐसा इसलिए है क्योंकि लीक चेक उस जानकारी पर आधारित है जो जीटीएस्ट रजिस्ट्री नामक विशेष इकाई में संग्रहीत है, और उम्मीदों के बिना मैक्स इसमें पंजीकृत नहीं हैं। – r5ha

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