【问题标题】:Is there a <Do-nothing> kind of action in the EXPECT_CALL of Gmock?Gmock 的 EXPECT_CALL 中是否有 <Do-nothing> 类型的动作?
【发布时间】:2018-11-20 12:41:41
【问题描述】:

SUT 正在调用为其定义了 EXPECT_CALL 的外部库。 我只想在第一次调用该函数时做某事,而在其他时候忽略做任何事情(但检查它是否被调用了两次);反之亦然..即第一次调用它时什么都不做,第二次调用它时什么都不做。

// Code for the Expect Call  
EXPECT_CALL(*mock_ptr, some-function(_,_)) .Times(2) .WillOnce(action1)
.WillOnce(do-nothing);

// SUT call
ASSERT_NO_THROW(sut_function(arg1, arg2));

忽略第二个(什么都不做)WillOnce,我收到一个 Gmock 警告,例如:

GMOCK 警告:test_blah-blah.cpp:321:指定的操作太少 EXPECT_CALL(*mock_ptr, some-function(,))... 预期被调用 两次,但只有 1 个 WillOnce()。 GMOCK 警告: test_blah-blah.cpp:321: 动作在 EXPECT_CALL(*mock_ptr, some-function(,))... 调用了 2 次,但只有 1 个 WillOnce() 是 指定 - 直接返回。

我应该在什么都不做的部分采取什么措施来避免收到此警告? some-function 是一个 void 返回函数。

谢谢!

【问题讨论】:

    标签: unit-testing googletest googlemock


    【解决方案1】:
    // Code for the Expect Call  
    EXPECT_CALL(*mock_ptr, some-function(_,_)) .Times(2) .WillOnce(action1)
    .WillOnce(Return());
    
    // SUT call
    ASSERT_NO_THROW(sut_function(arg1, arg2));
    

    为第二个(或第一个)添加 Return() .WillOnce 解决了这个问题。参考github中的cheatsheet来查找匹配的action。

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      相关资源
      最近更新 更多