GoogleMockがテスト終了時に問題を誤って報告しています。私は間違って何をしていますか?私はgooglemockのドキュメントを精査しましたが、完全な例はなく、私が抱えている問題については何も記述していません。テストの終了時にGoogleモックが誤ってエラーを報告しています。私は間違って何をしていますか?
私が手にエラーがある:
はgooglemocktest.cpp(53): ERROR: this mock object should be deleted but never is.
Its address is @0018FDC4.
ERROR: 1 leaked mock object found at program exit.
簡単なテストのためのコードは次のとおりです。私はIBAR ::〜IBAR()が実際に呼ばなっているデバッガを使用して検証した
#include <string>
#include <iostream>
#include <memory>
#include "gmock/gmock.h"
class IBar
{
public:
virtual ~IBar() {}
virtual void b() = 0;
virtual int c(std::string) = 0;
};
class Foo
{
private:
IBar *bar_;
public:
Foo(IBar *bar);
int a();
};
Foo::Foo(IBar *bar)
: bar_(bar)
{
}
int Foo::a()
{
// bar_->b();
return bar_->c("hello");
}
class BarMock : public IBar
{
public:
MOCK_METHOD0(b, void());
MOCK_METHOD1(c, int(std::string));
};
using ::testing::Return;
void TestAFunctionInFoo()
{
try
{
BarMock barMock;
std::unique_ptr<Foo> newFoo(new Foo(&barMock));
EXPECT_CALL(barMock, b());
EXPECT_CALL(barMock, c("hello")).WillOnce(Return(42));
newFoo->a();
}
catch (std::exception& e)
{
std::cout << "Mock exception caught: " << e.what() << std::endl;
}
catch (...)
{
}
}
int main(int argc, char* argv[])
{
::testing::GTEST_FLAG(throw_on_failure) = true;
::testing::InitGoogleMock(&argc, &argv[0]);
TestAFunctionInFoo();
return 0;
}
。しかし、私はまだこのエラーメッセージが表示されます。 Foo :: a()でIBar :: b()の呼び出しをコメント解除すると、テストの失敗がなくなりcatchステートメントが呼び出されなくなります。 IBar ::〜IBar()が呼び出されましたが、モックオブジェクトが削除されていないことを示すエラーメッセージはありません。
ご協力いただきありがとうございます。あなたがthrow_on_failure
フラグを有効にしているので、それが起こる
私は恐れますが、gest 4.6.1でFedora 15のgtest/gmock 1.5で動作を確認しました。あなたはgmockリスト/グループを試しましたか? – boycy