【问题标题】:How to make a mock object throw an exception in Google Mock?如何使模拟对象在 Google Mock 中引发异常?
【发布时间】:2014-02-15 16:09:08
【问题描述】:

使用 Google Mock 1.7.0,我有一个带有方法的模拟对象,我希望它被调用,在这种情况下,模拟的方法应该引发异常。

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(???);

是否存在引发异常的 Google Mock 操作?我在文档中没有找到它,但我怀疑到目前为止没有人需要它。

谢谢!

【问题讨论】:

    标签: c++ unit-testing exception throw googlemock


    【解决方案1】:

    只需编写一个引发异常的简单操作:

    ACTION(MyThrowException)
    {
        throw MyException();
    }
    

    并像使用任何标准动作一样使用它:

    ObjectMock object_mock_;
    EXPECT_CALL(object_mock_, method())
      .Times(1)
      .WillRepeatedly(MyThrowException());
    

    还有一个 googlemock 标准操作 Throw(),它支持在所采取的操作时抛出异常(请注意,MyException 必须是可复制的类,才能使其正常工作!):

    ObjectMock object_mock_;
    EXPECT_CALL(object_mock_, method())
      .Times(1)
      .WillRepeatedly(Throw(MyException()));
    

    GoogleMock CookBook 中查找ACTION 和参数化ACTION_P<n> 定义的完整文档。

    【讨论】:

    • 错误:宏“ACTION_P”需要 2 个参数,但只给出了 1 个
    • @user1735594 抱歉,确实ACTION_P 旨在接收额外的参数,在您的情况下不需要这些参数。我会相应地编辑我的答案。
    • 我完全不明白为什么这个答案被否决了?这与它的内容没有真正的关系,但可能是个人的意思。
    • 你能告诉我们 Throw 工作需要什么#include 吗?当我包含 #include <gmock/gmock.h>#include <gtest/gtest.h> 时找不到它
    【解决方案2】:

    其语法为Throw(exception),其中异常是任何可复制的值。

    ObjectMock object_mock_;
    EXPECT_CALL(object_mock_, method())
      .Times(1)
      .WillRepeatedly(Throw(exception));
    

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 2023-03-23
      • 2023-03-27
      • 1970-01-01
      • 2019-09-23
      • 2012-05-05
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多