为什么 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::mA
是 A
class 的 实例 。它对 child-classes 和对象一无所知。
成员 B::mA
需要是引用或指针才能使多态性起作用。
我一直在尝试使用 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::mA
是 A
class 的 实例 。它对 child-classes 和对象一无所知。
成员 B::mA
需要是引用或指针才能使多态性起作用。