googletest简介gtest, ut, 加过滤条件EXPECT_CALL
googletest简介_google test_唏噗的博客-CSDN博客
gtest Test_F 和Test 区别_惹不起的程咬金的博客-CSDN博客
GTest 总结_gtest getparam_HUSTER593的博客-CSDN博客
https://www.cnblogs.com/jycboy/p/gtest_catalog.html
https://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
https://www.cnblogs.com/coderzh/archive/2010/01/09/beautiful-testcase.html
gtest 三种事件机制_gtest teardown-CSDN博客
gtest中如何跳出当前测试案例-CSDN博客
括:行覆盖率、函数覆盖率、分支覆盖率
如果目标是“确认我们新增函数都跑到”,日志比 coverage 更可靠;好的,那现在是不是所有需要覆盖的地方,都加了日志了?行覆盖率/函数覆盖率/分支覆盖率。麻烦如果没有加的,帮我加上。同时再完善一下testcase,保证所有地方都测到.
TearDown
一、全局的事件机制(针对整个测试程序)
实现全局的事件机制,需要创建一个自己的类,然后继承testing::Environment类,然后分别实现成员函数SetUp()和TearDown(),同时在main函数内进行调用,即"testing::AddGlobalTestEnvironment(new MyEnvironment);",通过调用函数我们可以添加多个全局的事件机制。
SetUp()函数是在所有测试开始前执行。
TearDown()函数是在所有测试结束后执行。
示例:
可以通过命令行参数--gtest_filter来添加过滤条件,支持通配符和正则表达式。
过滤条件的语法和用法
通配符:
*:表示任意数量的字符。?:表示任意单个字符。-:表示排除特定测试。::表示或(取或)。
示例:
./foo_test:运行所有测试案例。./foo_test --gtest_filter=*:运行所有测试案例。./foo_test --gtest_filter=FooTest.*:运行所有测试案例名称以FooTest开头的案例。./foo_test --gtest_filter=*Null*:*Constructor*:运行所有测试案例名称或测试名称包含Null或Constructor的案例。./foo_test --gtest_filter=-*DeathTest.*:运行所有非死亡测试案例。./foo_test --gtest_filter=FooTest.*-FooTest.Bar:运行所有以FooTest开头的案例,但排除FooTest.Bar案例12。
过滤多个测试用例的语法
- 使用冒号
:分隔多个测试用例名称或模式,例如:--gtest_filter="FooTest.*:BarTest.case1:OtherTest.case2"2。
排除特定测试用例的语法
- 使用符号
-排除特定测试用例,例如:--gtest_filter="FooTest.*:-FooTest.case1"运行所有以FooTest开头的案例,但排除FooTest.case12。
通过这些过滤条件,可以高效地指定需要运行的测试案例,或者排除不需要的测试案例,从而优化调试和测试过程。
玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数 - CoderZh - 博客园
--gtest_break_on_failure 重复执行1000次,并且在第一个错误发生时立即停止。这个功能对调试非常有用。
单元测试框架gtest学习(四)—— 参数化_gtest 参数化-CSDN博客
GoogleTest单元测试 - 随笔分类 - 超超boy - 博客园
Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础语法 - 超超boy - 博客园
#include "stdafx.h" //定义需要模拟的接口类 class FooInterface { public: virtual ~FooInterface() {} virtual std::string getArbitraryString() = 0; virtual int getPosition() = 0; }; //模拟类 class MockFoo : public FooInterface { public: MOCK_METHOD0(getArbitraryString, std::string()); MOCK_METHOD0(getPosition, int()); }; using namespace seamless; using namespace std; using ::testing::Return; int main(int argc, char** argv) { //Since Google Mock depends on Google Test, InitGoogleMock() is also responsible for initializing Google Test. //Therefore there's no need for calling testing::InitGoogleTest() separately. ::testing::InitGoogleMock(&argc, argv); int n = 100; string value = "Hello World!"; MockFoo mockFoo; EXPECT_CALL(mockFoo, getArbitraryString()) .Times(1) .WillOnce(Return(value)); string returnValue = mockFoo.getArbitraryString(); cout << "Returned Value: " << returnValue << endl; //在这里Times(2)意思是调用两次,但是下边只调用了一次,所以会报出异常 EXPECT_CALL(mockFoo, getPosition()) .Times(2) .WillRepeatedly(Return(n++)); int val = mockFoo.getPosition(); //100 cout << "Returned Value: " << val << endl; //getPosition指定了调用两次,这里只调用了一次,所以运行结果显示出错 return EXIT_SUCCESS; }可以看到上边都输出了,最后有个错误,这个错误是因为:getPosition指定了调用两次,这里只调用了一次,所以运行结果显示出错
主要是下面这3步.
MOCK_METHOD(getArbitraryString, std::string()) EXPECT_CALL(mockFoo, getArbitraryString()) .Times(1) .WillRepeatedly(Return(value)); string returnValue = mockFoo.getArbitraryString();