GMOCK是Google Test框架的一个扩展,用于进行C++的单元测试。EXPECT_CALL是GMOCK中的一个宏,用于设置对特定函数调用的期望。 在unique_ptr上使用GMOCK的EXPECT_CALL可以用于对unique_ptr所拥有的对象的成员函数进行测试。通过EXPECT_CALL,我们可以设置对特定成员函数的调用次数、参数期望值以及返回值等。
初识Gmock是之前分析GTest源码时,它的源码和GTest源码在同一个代码仓库中(https://github.com/google/googletest)。本文我将以目前最新的Gmock1.7版本为范例,分析其实现原理。(转载请指明出于breaksoftware的csdn博客)
EXPECT_CALL做了什么 //googlemock/include/gmock/gmock-spec-builders.h#define EXPECT_CALL(obj, call) \GMOCK_ON_CALL_IMPL_(obj, InternalExpectedAt, call)#define GMOCK_ON_CALL_IMPL_(mock_expr, Setter, call) \((mock_expr).gmock_##call)(::testing::internal::GetWithoutMatchers(), \nullptr)...
这两个语句之间存在细微但显著的差异。EXPECT_CALL设置模拟调用的期望值。编写
宏第一个参数为函数名,第二个参数为函数类型 然后,使用EXPECT_CALL来设置调用到这个函数时的期望,代码如下(gmock_test.cpp第86行): EXPECT_CALL(*api, open(::testing::, ::testing::)) .Times(1) .WillRepeatedly(::testing::Return(11)); 具体含义为,在这个期望设置完以后,只会发生一次api->open调用...
EXPECT_CALL(mockObj, doSomething()).Times(1); ``` 在上述代码中,我们使用`EXPECT_CALL`宏来设置mockObj的doSomething方法的行为和预期,该方法将在测试中被调用一次。`Times(1)`表示doSomething方法预期被调用一次。 3.验证模拟对象的调用: 在GMock中,我们可以使用`EXPECT_CALL`宏来验证Mock对象的方法调用。
EXPECT_CALL(turtle, GetY()) .WillOnce(Return(100)) .WillOnce(Return(200)) .WillRepeatedly(Return(300)); 上面的意思是指turtle.GetY()将至少被调用2次,第一次返回100,第二次返回200,从第三次以后都返回300。 当然,你如果你明确写上Times(),Google Mock不会去推断cardinality了。如果你指定的cardinality...
然后在第11行中,EXPECT_CALL(mockFoo, getSize()).InSequence(s1, s2)说明getSize()的行为优先于s1、s2. 而第12行时,EXPECT_CALL(mockFoo, getValue()).InSequence(s1)说明getValue()的行为在序列s1- 中。 结果: First: 1 Second: Hello World! 1. 2. eg:把mockFoo.getSize()和mockFoo.getValue...
接下来,我们用EXPECT_CALL来定义Mock对象的行为, EXPECT_CALL(mock_if_impl,some_func).Times(::testing::AtLeast(1)).WillOnce(::testing::Return(true)); EXPECT_CALL是有点难理解的,接下来,我们详细说一说。 语法定义 EXPECT_CALL(mock_object,method(matcher)).Times(cardinality).WillOnce(action).WillRe...
EXPECT_CALL声明一个调用期待,就是我们期待这个对象的这个方法按什么样的逻辑去执行。 mock_object是我们mock的对象,上例中就是TestUser的一个对象。 Method是mock对象中的mock方法,它的参数可以通过matchers规则去匹配。 With是多个参数的匹配方式指定。