Gmock 的EXPECT_CALL 中是否有<Do-nothing> 类操作?

Is there a <Do-nothing> kind of action in the EXPECT_CALL of Gmock?

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 WARNING: test_blah-blah.cpp:321: Too few actions specified in EXPECT_CALL(*mock_ptr, some-function(,))... Expected to be called twice, but has only 1 WillOnce(). GMOCK WARNING: test_blah-blah.cpp:321: Actions ran out in EXPECT_CALL(*mock_ptr, some-function(,))... Called 2 times, but only 1 WillOnce() is specified - returning directly.

我在什么都不做的部分执行什么操作才不会收到此警告? some-function 是一个 void 返回函数。

谢谢!

// 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));

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