我想使用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而导致错误。
有没有更好的设计呢?
感谢〜
答案 0 :(得分:0)
如果我能理解你想做什么而我不会犯这个错误, 我更喜欢在myClass类中使用方法来检查参数的正确值。 这意味着,您应该在将参数传递给类构造函数之后,提供另一种方法来检查值。
答案 1 :(得分:0)
向virtual
添加MyInterface
析构函数,然后在删除(抽象)MyInterface
时,也会调用所有子类析构函数。
struct MyInterface {
virtual ~MyInterface() { }
// public functions
};