初识Gmock是之前分析GTest源码时,它的源码和GTest源码在同一个代码仓库中(https://github.com/google/googletest)。本文我将以目前最新的Gmock1.7版本为范例,分析其实现原理。(转载请指明出于breaksoftware的csdn博客)
using ::testing::_;// 期望turtle.GoTo(50, y)被调用,y为任意值EXPECT_CALL(turtle, GoTo(50, _)); 如果不对参数做任何限制,则可以省略参数表: // 期望turtle.Forward(x)被调用,x为任意值EXPECT_CALL(turtle, Forward);// 期望turtle.GoTo(x, y)被调用,x和y为任意值EXPECT_CALL(turtle, GoTo); ...
{EXPECT_CALL(*mockArithmetics,plus(Gt(1),Gt(1))).Times(AnyNumber()).WillRepeatedly(Return(98));EXPECT_CALL(*mockArithmetics,minus(Lt(100),Le(100))).Times(AnyNumber()).WillRepeatedly(Return(98));EXPECT_EQ(98,transcript->compute(98, 99, 100)); } TEST_P(test_suite_name, test_name...
EXPECT_CALL和ON_CALL是设计用于模拟对象的宏。通常用例如下:
EXPECT_CALL(::sendto(_, _, _, _, _, _)) .Times(1) .WillOnce(Return(0)); // 模拟 sendto 成功发送 // 创建 UDPSink 实例 UDPSink sink("127.0.0.1", 8080); // 创建一个虚拟的日志消息 spdlog::details::log_msg msg; msg.payload = "Test log message"; ...
EXPECT_FALSE( condition ); ASSERT_FALSE( condition ); //二元比较 //等于 EXPECT_EQ( val1 , val2 ); ASSERT_EQ( val1 , val2 ); //不等于,注意比较空指针的时候,使用EXPECT_NE( ptr , nullptr) 而不是 EXPECT_NE( ptr , NULL)
EXPECT_\*系列:如果检测失败发出提示,并继续往下执行 通常情况应该首选使用EXPECT,因为ASSERT在报告完错误后不会进行清理工作,有可能导致内存泄露问题。 gtest有很多类似的宏用来判断数值的关系、判断条件的真假、判断字符串的关系。 条件判断 ASSERT_TRUE(condition); // 判断条件是否为真 ...
using ::testing::ReturnRef; class MockFoo : public Foo { ... MOCK_METHOD(Bar&, GetBar, (), (override)); MOCK_METHOD(const Bar&, GetBar, (), (const, override)); }; ... MockFoo foo; Bar bar1, bar2; EXPECT_CALL(foo, GetBar()) // The non-const GetBar(). .WillOnce(...
EXPECT_CALL(calc, add(1, 2)) .WillOnce(testing::Return(3)); // 设置预期行为 EXPECT_EQ(3, calc.add(1, 2)); // 执行测试 } ``` 在这个示例中,我们定义了一个简单的 Calculator 类,并使用 CalculatorMock 类来创建 mock 对象。然后我们使用 GoogleTest 和 GoogleMock 提供的 API 来设置 mock ...
As the death test is executed in a subprocess, you need to put your EXPECT_CALL into EXPECT_EXIT, such as TEST_F(TestDummy, dummy_test) { EXPECT_EXIT( EXPECT_CALL(mock, bar()).Times(1).WillOnce(Return(true));foo(), testing::ExitedWithCode(1), ""); ...