如何在传递给模拟方法的对象上调用方法

Jar*_*ber 5 c++ unit-testing googletest googlemock

我对gmock的工作方式很新.

我有一个带有addEvent方法的mock,它通过指针获取MyClass类型的对象.我需要在这个对象上调用MyClass :: makeCall.

class SchedulerMock
{
public:
    MOCK_CONST_METHOD1(addEvent, void(MyClass*));

};
Run Code Online (Sandbox Code Playgroud)

我找到了这个主题: 在传递给模拟函数的参数上调用成员函数的最简单方法是什么?

还有一个例子:

IFooable* ifooable = new IFooableImpl(...); 
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
  .WithArg<0>(Invoke(&ifooable,&IFooable::Fooable));
Run Code Online (Sandbox Code Playgroud)

但我不想在我在test中创建的对象上调用方法.我想mock在实际传递给mock的对象上调用makeCall.所以我可以将我的模拟注入另一个将创建一些新对象的类,并在我的schedulerMock上调用addEvent,我希望每次有人在我的mock上调用addEvent时,这个mock都会在传递的参数上调用makeCall.希望我清楚自己.

这可能吗?

Wer*_*mus 0

您可以使用另一个调用模拟函数的函数...

class SchedulerMock
{
  public:
    //.... etc
    void addEvent(MyClass* c) const
    {
      c->makeCall();
      mockAddEvent(c); //Wholla, test still works and makeCall called. 
    }

    MOCK_CONST_METHOD1(mockAddEvent, void(MyClass*));
};
Run Code Online (Sandbox Code Playgroud)