为什么GoogleMock嘲笑的原始方法仍然被调用?

时间:2017-09-13 06:49:02

标签: c++ unit-testing googletest googlemock

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

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

然而,在我的测试中,我仍然得到了我的' printf'调用。有什么想法吗?

以下是类/头文件:

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();
}

MockA.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();
}

1 个答案:

答案 0 :(得分:0)

一个主要问题是B::mAA类的实例。它对子类和对象一无所知。

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