【问题标题】:Is there a way to only mock functions only when I need in Google mock?有没有办法只在我需要 Google 模拟时才模拟函数?
【发布时间】:2022-07-25 23:19:51
【问题描述】:

我有一个模拟

class mockA: public A{
    public:
        .......
        MOCK_MOTHOD0(functionB, bool());
}

而functionB是A类中受保护的虚函数。我可以在我的测试中使用模拟方法

 TEST(test,testA){
    .....
    mockA objA;
    EXPECT_CALL(objA, functionB()).WillOnce(Return(true));
}

效果很好。但是我也有一些我不想模拟函数B的测试用例。我应该怎么办?我能想到的一种方法是创建另一个与 mockA 内容完全相同但没有行 MOCK_MOTHOD0(functionB, bool()); 的模拟类。有没有更好的办法?谢谢。

【问题讨论】:

  • 测试体的.....中是否定义了class mockA
  • 您可能对NiceMock or StrictMock感兴趣。
  • @Eljay 为什么我需要定义一个类? mockA 类在 A.test.cc 文件中,class A 在另一个文件中 A.hh
  • 为什么我需要定义一个类?你有定义mockA的理由吗?
  • @Eljay。因为我想在我的 gtest 中模拟 A 类中的一些函数,包括functionB。就我而言,functionB 很特别,因为有时我需要模拟它,有时我不需要模拟它。对于像functionC/D/E 这样的其他功能,我仍然需要模拟它们。所以我想知道如果在某些情况下我不需要模拟函数B,我是否必须创建另一个几乎完全相同的类。如果是这样,我将不得不重用代码来模拟函数C/D/E

标签: c++ unit-testing mocking googletest googlemock


【解决方案1】:

似乎http://google.github.io/googletest/gmock_cook_book.html#delegating-calls-to-a-parent-class 完全可以解决您想要的问题。在所有测试中,您应该使用EXPECT_CALL,但对于特殊测试 - 委托给具体类。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2020-06-08
    • 2023-04-03
    • 1970-01-01
    • 2022-10-18
    相关资源
    最近更新 更多