为什么 GoogleMock 模拟的原始方法仍然被调用?

Why is original method mocked by GoogleMock still getting called?

我一直在尝试使用 GoogleMock 覆盖底层 class 中的一些特定方法,但我似乎得到的是基本构造函数,而不是模拟对象。我在这里遗漏了什么明显的东西吗?

我一直在关注以下示例: http://blog.divebomb.org/2011/07/my-first-c-cmake-googletest-and-googlemock/

但是,在我的测试中,我的 'printf' 仍然被呼叫。有什么想法吗?

这是 classes/header 个文件:

A.h:

#pragma once
class A
{
public:
    virtual void methodToOverride();
    void someConcreteMethod();

    int mMemberVariable;
};

A.cpp:

#include "A.h"

void A::methodToOverride()
{
    std::printf("Hello World");
}

void A::someConcreteMethod()
{
}

B.h:

#include "A.h"

class B
{
public:
    B(A &injectedClass);
    ~B();
    void MethodToTest();

private:
    A mA;
};

B.cpp:

#include "B.h"

B::B(A & injectedClass):mA(injectedClass)
{
    mA.someConcreteMethod();
}

B::~B(){}

void B::MethodToTest()
{
    mA.methodToOverride();
}

模拟A.h:

#include "A.h"
#include "gmock\gmock.h"

class MockA : public A
{
public:
    MOCK_METHOD0(methodToOverride, void());

};

BTest.cpp:

#include "gtest/gtest.h"
#include "MockA.h"
#include "B.h"

using ::testing::AtLeast;
using ::testing::_;

TEST(BTest, mockObject)
{
    // Arrange
    MockA injectedMock;
    EXPECT_CALL(injectedMock, methodToOverride())
        .Times(AtLeast(1));

    B classUnderTest(injectedMock);

    // Act
    classUnderTest.MethodToTest();
}

一个主要问题是 B::mAA class 的 实例 。它对 child-classes 和对象一无所知。

成员 B::mA 需要是引用或指针才能使多态性起作用。