理解も解決もできない奇妙な動作を見つけました。タイプのいくつかの実際のオブジェクトを提供するファクトリー FooFactory がありますFoo
。Foo
私がモックしたオブジェクトのメソッド呼び出しをテストするには、呼び出しが期待できるオブジェクトを返すFooFactory
ようにします。MockFooFactory
MockFoo
テスト (含まれていません) は正常に動作していますが、テスト後、MockFooFactory の分解中に gmock/gtest がハングします (ミューテックスの問題のようです)。正確には、デフォルトの ON_CALL を削除すると、Mutex の作成時に問題が発生します。
スマート ポインターに問題があるはずです。スマート ポインターを使用せずにバージョンをビルドすると、正常に動作します。しかし、私がテストしたソフトウェアは shared_ptr をスマート ポインターとして使用しているため、それらを取り除くことはできません。
エラーを再現するサンプルを次に示します。
#include <boost/shared_ptr.hpp>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
class Foo
{
public:
void doSomething() {}
};
typedef boost::shared_ptr<Foo> FooPtr;
class FooFactory {
public:
FooPtr create() {
return FooPtr(new Foo());
}
};
typedef boost::shared_ptr<FooFactory> FooFactoryPtr;
class MockFoo : public Foo {
public:
MOCK_METHOD0(doSomething, void());
};
typedef boost::shared_ptr<MockFoo> MockFooPtr;
class MockFactory : public FooFactory
{
public:
MOCK_METHOD0(create, FooPtr());
};
typedef boost::shared_ptr<MockFactory> MockFactoryPtr;
using ::testing::Return;
class Fixture : public ::testing::Test {
protected:
virtual void SetUp() {
mockFoo = MockFooPtr(new MockFoo());
mockFactory = MockFactoryPtr(new MockFactory());
ON_CALL(*mockFactory, create()).WillByDefault(Return(mockFoo));
}
MockFactoryPtr mockFactory;
MockFooPtr mockFoo;
};
TEST_F(Fixture, Test)
{
/* Not needed */
}
誰かが同じ問題を経験したことがありますか、それとも解決策を持っていますか?