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 として削除され、エラーが発生します。

これのためのより良いデザインはありますか?

ありがとう〜

4

2 に答える 2

0

あなたが何をしたいのか理解でき、間違いを犯さないのであれば、引数の適切な値をチェックするためにmyClassクラス内にメソッドを含めることをお勧めします。つまり、引数をクラスコンストラクターに渡した後、値をチェックするための別のメソッドを提供する必要があります。

于 2012-05-25T21:21:42.803 に答える
0

virtualにデストラクタを追加しMyInterface、 (abstract) を削除するとMyInterface、すべてのサブクラスのデストラクタも呼び出されます。

struct MyInterface {
    virtual ~MyInterface() { }
    // public functions
};
于 2012-05-27T11:05:33.303 に答える