Gmock的EXPECT_CALL中是否有<no-nothing>动作?

时间:2018-11-20 12:41:42

标签: unit-testing googletest googlemock

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,一些功能())...预计会被调用   两次,但只有1个WillOnce()。 GMOCK警告:   test_blah-blah.cpp:321:操作在EXPECT_CALL(* mock_ptr,   some-function())...调用了2次,但是只有1个WillOnce()   指定-直接返回。

我该采取什么措施才能避免收到此警告? some-function是一个无效的返回函数。

谢谢!

1 个答案:

答案 0 :(得分:0)

// 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来找到匹配的动作。