2013-02-22 24 views
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 */ 
} 

任何人都經歷了同樣的問題或有這方面的解決方案?

回答