如何使用带有智能指针的模拟对象

时间:2012-05-25 19:54:30

标签: c++ mocking shared-ptr

我想使用mock对象来测试使用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,否则,mock将被删除为MyInterface而导致错误。

有没有更好的设计呢?

感谢〜

2 个答案:

答案 0 :(得分:0)

如果我能理解你想做什么而我不会犯这个错误, 我更喜欢在myClass类中使用方法来检查参数的正确值。 这意味着,您应该在将参数传递给类构造函数之后,提供另一种方法来检查值。

答案 1 :(得分:0)

virtual添加MyInterface析构函数,然后在删除(抽象)MyInterface时,也会调用所有子类析构函数。

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