【问题标题】:gMock upcasting fails on EXPECT_CALLgMock upcasting 在 EXPECT_CALL 上失败
【发布时间】:2018-05-25 05:34:13
【问题描述】:

我在使用 Gmock 进行 UpCasting 时遇到了问题

#include "gtest/gtest.h"
#include "gmock/gmock.h"

using namespace testing;
using namespace std;

class MyClass {
public:
    MyClass(int xxx) {}
    int call(int x) {

    };
};

class MockMyClass : public MyClass {
public:
    MockMyClass(int xxx) : MyClass(xxx) {};
    MOCK_METHOD1(call, int(int));
};

TEST(TestMyClass, worksFine) {
    MockMyClass mock(111);

    EXPECT_CALL(mock, call(_))
            .WillOnce(Return(2000)); // times(1) by default;

    mock.call(23);
}

TEST(TestMyClass, doesntWork) {
    MockMyClass mock(111);
    MyClass &myClassNotMock = mock;

    EXPECT_CALL(mock, call(_))
            .WillOnce(Return(2000)); // times(1) by default;

    myClassNotMock.call(23);
}

我尝试过使用指针,但看起来是同样的问题。每次我有 Base 对象引用(从 mock 向上转换)并且我在其上调用一个函数时,gmock 都不会拾取它。

我会很感激一些帮助

【问题讨论】:

  • 我认为您的示例代码不正确。您的 MockMyClass 不是从 MyClass 派生的,也没有 class 函数。它也没有任何 gmock 和 gtest 标头。请按照您所说的方式编译并失败。
  • 感谢您的回答我已经设法找出问题所在,我已经更新了代码以便其他人理解。此外,我回答了我的问题

标签: c++ googletest gmock


【解决方案1】:

好的,我已经设法找出问题所在。因为 MyClass 调用函数不是虚拟的,所以我必须使用 Google Mock CookBook mocking non virtual methods 中解释的模板技术,或者简单地为 MyClass 引入一个接口并正常模拟它

【讨论】:

  • 接受你自己的答案吗?
猜你喜欢
  • 2018-12-30
  • 1970-01-01
  • 2016-04-25
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
相关资源
最近更新 更多