2012-05-25 31 views
1

我想使用模擬對象來測試我的類,它使用shared_ptr指針。如何使用模擬對象與智能指針

它喜歡,

struct MyInterface { 
    // public functions 
}; 

class MyClass { 
public: 
    MyClass (shared_ptr<MyInterface> handle) : m_handle(handle) {} 
    ~MyClass() {} 
    // ... 
private : 
    shared_ptr<MyInterface> m_handle; 
} 

當我測試MyClass的,我通過一個模擬對象吧。

struct NullDeleter {template<typename T> void operator()(T*) {} }; 

TMockObject<MyInterface> * mock = new TMockObject<MyInterface>(); 
shared_ptr<MyInterface> handle((MyInterface*)(*mock), NullDeleter()); 

MyClass myClass(handle); 
delete mock; 

問題是我有當我創建共享指針使用NullDeleter,否則,模擬將被刪除作爲MyInterface的引起誤差。

有沒有更好的設計呢?

感謝〜

回答

0

如果我能明白你想要做什麼,我不拿錯, 我更喜歡有myClass的類中的方法來檢查參數的適當的值。這意味着,你應該在將你的參數傳遞給類的構造函數之後,提供另一種方法來檢查值。

0

virtual析構函數添加到MyInterface,然後在刪除(摘要)MyInterface時也調用所有子類析構函數。

struct MyInterface { 
    virtual ~MyInterface() { } 
    // public functions 
};