2017-05-03 6 views
0

コードGMock漏洩メモリ

class A { 
public: 
    void doit() {...} 
} 

class B { 
public: 
    explicit B(unique_ptr<A> a): a_(move(a)) {} 

    void run() { 
    a_->doit(); 
    } 

private: 
    unique_ptr<A> a_; 
} 

テストコード

class MockA : public A { 
public: 

    MOCK_METHOD0(doit, void(void)); 
} 

TEST(BTest, Test) { 
    auto mockA = std::make_unique<A>(); 
    EXPECT_CALL(*mockA, doit(_)).Times(1); 

    B b(std::move(mockA)); 
    b.run(); 
} 
このコードを実行することが

ERROR漏れる場合

:このモックオブジェクトを(試験BTest.Testで使用されます)削除されるべきではありません。そのアドレスは@ 0x1234です。

破壊中に予想が実行されるはずなので、なぜその原因になるのかわかりません。

ここで説明したようにshared_ptrエイリアスメソッドを試しましたが、Dependency injection with unique_ptr to mockでも例外があります。

答えて

2

class Aには仮想デストラクタが必要です。それ以外の場合はclass MockAのデストラクタは実行されません。

+0

@jack_carver同じこと: 'doIt()'は仮想ではありません –

関連する問題