2017-05-03 4 views
0

코드GMock 누출 메모리

class A { 
public: 
    void doit() {...} 
} 

class B { 
public: 
    explicit B(unique_ptr<A> a): a_(move(a)) {} 

    void run() { 
    a_->doit(); 
    } 

private: 
    unique_ptr<A> a_; 
} 

테스트 코드

class MockA : public A { 
public: 

    MOCK_METHOD0(doit, void(void)); 
} 

TEST(BTest, Test) { 
    auto mockA = std::make_unique<A>(); 
    EXPECT_CALL(*mockA, doit(_)).Times(1); 

    B b(std::move(mockA)); 
    b.run(); 
} 
이 코드를 실행하기가

ERROR 누수 때

이 모의 객체를 (테스트 BTest.Test에 사용) 삭제해야하지만 절대로 없어야합니다. 주소는 @ 0x1234입니다.

파괴가 진행되는 동안 예상이 실행되기 때문에 그 원인을 알지 못합니다.

여기에 설명 된대로 shared_ptr 별칭 메서드를 시도했는데 (Dependency injection with unique_ptr to mock) 그래도 여전히 예외가 발생합니다.

답변

2

class A에는 가상 소멸자가 있어야하며, 그렇지 않으면 class MockA의 소멸자가 실행되지 않습니다.

+0

@jack_carver 같은 점 : doIt()은 가상이 아닙니다. –