GMockを使用すると、クラスのデストラクタが呼び出されたことをどのように確認できますか? wrap it in another class以外の方法がありますか?GMockを使用してデストラクタコールを確認する
明白な方法EXPECT_CALL(object, ~classtype())
は、コンパイラエラー(gmockはgmock_~classtype
というモックメソッドを生成できません)を生成します。
GMockを使用すると、クラスのデストラクタが呼び出されたことをどのように確認できますか? wrap it in another class以外の方法がありますか?GMockを使用してデストラクタコールを確認する
明白な方法EXPECT_CALL(object, ~classtype())
は、コンパイラエラー(gmockはgmock_~classtype
というモックメソッドを生成できません)を生成します。
デストラクタの呼び出しをチェックする簡単な方法:あなたのテスト関数で
class MockFoo : public Foo {
...
// Add the following two lines to the mock class.
MOCK_METHOD0(Die, void());
virtual ~MockFoo() { Die(); }
};
:
MockFoo* foo = new MockFoo;
...
{
EXPECT_CALL(*foo, Die());
}
詳細はここで見つけることができます: Mocking Destructors
あなたがしている場合を除き--gmock_catch_leaked_mocks=0
を渡すと、モックを破壊しなかったときにgmockがすでに検出されているはずです。デストラクタは満足していない期待値がエラーとしてフラグされているので、gmockは呼び出されなかったときを検出する特別なサポートをしています。
しかし、GMockは、(ON_CALL/EXPECT_CALL)に期待していないリークしたモックを検出しません。これは、リークチェックがGTestレジストリという特殊なエンティティに格納されている情報に基づいており、期待外れのモックが登録されていないためです。 – r5ha