GMock将一个模拟对象传递给另一个对象,并调用一个stubed方法,这仍然是在调用真正的逻辑
GMock passing a mocked object into another, and calling a stubed method is still calling real logic
我正试图将一个模拟对象传递给另一个对象的方法并调用它,得到的结果与调用实际方法的结果相同。
fooa.h-这是真正的类
#ifndef FOOA_H
#define FOOA_H
class FooA
{
public:
FooA();
virtual int method(int a, int b, int c, int d);
};
#endif // FOOA_H
fooa.pp
#include "fooa.h"
FooA::FooA()
{
}
int FooA::method(int a, int b, int c, int d)
{
return a+b+c+d;
}
mockedfooa.h-模拟版的fooa
#ifndef MOCKEDFOOA_H
#define MOCKEDFOOA_H
#include "fooa.h"
#include <gmock/gmock.h>
class MockedFooA : public FooA
{
public:
MOCK_METHOD4( method, int(int a, int b, int c, int d) );
};
#endif // MOCKEDFOOA_H
这个类调用FooA类中的方法
#include "fooa.h"
#include <iostream>
class Calculator
{
public:
Calculator()
{ }
void doCalc(FooA foo)
{
int a = 3, b =4 ,c = 12, d = 41;
std::cout<<foo.method(a,b,c,d)<<std::endl;
}
};
我的主要功能
#include "MockedFooA.h"
#include "calc.h"
using ::testing::_;
using ::testing::Return;
using namespace std;
int main(int argc, char *argv[])
{
Calculator oCalc; // object that uses the oFoo.method
FooA oFoo;//not mocked
oCalc.doCalc(oFoo);
MockedFooA oMockedFoo ; // mocked
ON_CALL(oMockedFoo,method(_,_,_,_)).WillByDefault(Return(20));
oCalc.doCalc(oMockedFoo);
}
输出为
60
60
因此,即使它被存根化,doCalc仍然调用真实的方法。
我的问题是:为什么当我把嘲笑的物体传给doCalc方法没有调用存根方法?
问题是您正在按值传递模拟对象。由于mock对象利用继承提供的动态绑定,因此需要使用引用或指针来传递它们。否则,您最终会对对象进行切片。
要实现所需的行为,请更改doCalc
方法,以通过引用而不是通过值获取FooA
参数。像这样:
void doCalc(FooA& foo)
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 构造函数正在调用一个使用当前类类型的函数
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 在另一个线程中调用luaL_error会引发qWarning
- 如何在qt中从另一个类调用函数
- 检查哪个对象调用了另一个对象的对象方法
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 我有一个调用ID3D11DeviceContext::CopySubresourceRegion的循环.我怎么能强制等待
- 当另一个调用 lambda 使用默认捕获时,lambda 的闭包可能会被破坏吗?
- 在C++中嵌入Python:在Python脚本中导入模块在一个函数调用过程中有效,但在另一个调用过程中无效
- 如何在一个调用中释放多个互斥对象
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- 定义一个调用其他函数的内联函数是否有意义
- 我如何测试一个调用是在谷歌测试延迟后使用嘲讽框架进行的
- 我想创建一个调用函数的源文件,而不必创建对象
- 是否有可能制作一个调用jdbc的Java JNI
- 如果您有一个调用其他内部函数的类接口函数
- 打开文件来自一个调用请求在黑莓10级联
- 创建一个调用另一个可执行文件的可执行文件
- 什么是崩溃我的应用程序的异常,给定一个调用堆栈与UnhandledExceptionFilter