C++ 为什么GoogleMock模仿的原始方法仍然被调用?
我一直在尝试使用GoogleMock覆盖底层类中的一些特定方法,但是我似乎得到的是基本构造函数,而不是模拟对象。这里有什么明显的我遗漏的吗 我一直遵循以下示例: 然而,在我的测试中,我仍然得到我的“printf”调用。有什么想法吗 以下是类/头文件: A.h: A.cpp: B.h: B.cpp: MockA.h: BTest.cpp:C++ 为什么GoogleMock模仿的原始方法仍然被调用?,c++,unit-testing,googletest,googlemock,C++,Unit Testing,Googletest,Googlemock,我一直在尝试使用GoogleMock覆盖底层类中的一些特定方法,但是我似乎得到的是基本构造函数,而不是模拟对象。这里有什么明显的我遗漏的吗 我一直遵循以下示例: 然而,在我的测试中,我仍然得到我的“printf”调用。有什么想法吗 以下是类/头文件: A.h: A.cpp: B.h: B.cpp: MockA.h: BTest.cpp: #include "gtest/gtest.h" #include "MockA.h" #include "B.h" using ::testing::At
#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
类的一个实例。它对子类和对象一无所知
成员
B::mA
必须是多态性工作的参考或指针。@Someprogrammerdude重新发布了问题,删除了原始问题,并在此处使用了精确的代码。。。如果您有任何见解,他们将不胜感激@doctorlove从上一个问题重新发布请不要删除并重新发布同一个问题。改为编辑现有问题。这也会把这个问题再次推到头版。所以。。。当我沿着引用/指针的道路走下去时,如果没有使用该方法,情况就好了。。。但是当我尝试使用“EXPECT”调用时,它最终得到了奇怪的堆栈错误(特别是堆栈指针周围的错误没有正确匹配)。有没有更好的方法来实现这一点,使用谷歌模拟?
#include "A.h"
void A::methodToOverride()
{
std::printf("Hello World");
}
void A::someConcreteMethod()
{
}
#include "A.h"
class B
{
public:
B(A &injectedClass);
~B();
void MethodToTest();
private:
A mA;
};
#include "B.h"
B::B(A & injectedClass):mA(injectedClass)
{
mA.someConcreteMethod();
}
B::~B(){}
void B::MethodToTest()
{
mA.methodToOverride();
}
#include "A.h"
#include "gmock\gmock.h"
class MockA : public A
{
public:
MOCK_METHOD0(methodToOverride, void());
};
#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();
}