我试图将一个模拟对象传递给另一个对象的方法并调用它,我得到与调用真实方法相同的结果。
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.cpp
#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
calculator.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 方法时没有调用存根方法?