0

モックされたオブジェクトを別のオブジェクトのメソッドに渡して呼び出そうとしていますが、実際のメソッドを呼び出すのと同じ結果が得られます。

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 メソッドに渡すときに、スタブ化されたメソッドを呼び出さないのはなぜですか?

4

1 に答える 1