2
我發現了一個奇怪的行爲,我無法理解也無法解決。我有一個工廠FooFactory,它提供Foo
類型的一些實時對象。爲了測試Foo
對象的方法調用,我嘲笑FooFactory
,這樣MockFooFactory
返回MockFoo
對象,我可以期望調用。gtest在模擬模型返回默認值模擬時解構夾具時掛起
測試(未包括)工作正常,但在測試之後gmock/gtest掛起(看起來像互斥體問題)在MockFooFactory的解構過程中。準確地說,當創建互斥鎖時,刪除默認的ON_CALL會導致問題。
智能指針有一個問題,當我構建一個沒有智能指針的版本時,它工作正常。但是我測試的軟件使用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 */
}
任何人都經歷了同樣的問題或有這方面的解決方案?