gtest

news/2025/3/18 20:30:57/

asdasdwdsd

1 .TEST(案例的名字,案例的描述)

{

                EXCEPCT_EQ(1,func()); 

                ASSERT_EQ(2,func2());

                EXCEPCT_EQ(3,func3()); 

}

        a.func为你要测试的函数  

        b.excepct_eq : 与你预期值相等,则通过测试,反之报错,但会接着往下执行

     可以执行到assert_eq

        c. assert_eq:若与预期值不符,则停止测试,不会允许到 func3

类似的宏定义 

ASSERT_EQ(val1,val2);    EXPECT_EQ(val1,val2);    :判断两值是否相等,函数位置任意

ASSERT_NE(val1,val2);    EXPECT_NE(val1,val2);    判断两值不等
ASSERT_LT(val1,val2);    EXPECT_LT(val1,val2);    判断 val1 < val2
ASSERT_LE(val1,val2);    EXPECT_LE(val1,val2);    判断val1 <= val2
ASSERT_GT(val1,val2);    EXPECT_GT(val1,val2);    判断val1 > val2
ASSERT_GE(val1,val2);    EXPECT_GE(val1,val2);    判断val1 >= val2

注意:assert_*与expect_* 的区别在于 assert执行失败,则此包含整个assert的testsuit测试结束

                expect执行失败,但会接着执行testsuit中的剩余部分

2. 参数化

 第一步:.添加类,继承public::testing::TestWithParam<T>

class IsPrimeParamTest : public::testing::TestWithParam<int>

{

};

第二步:获取参数,并测试

TEST_P(案例名字,描述)

{

        int n = GetPara(); //传入的参数赋值

        EXPECT_TRUE(测试函数);

}

第三步 告诉要传入的参数

INSTANTIATE_TEST_CASE_P(描述,案例名字(注意与第二部的名字一致才能正确传入),testing :: Value(3,5,11,23))

testing :: Value() 这里为传入的参数,

        这里的Value可替换为Range(begin,end,step)

        testing::Value(3,5,7,9)  == test::Range(3,10,2).

         还可以替换为 ValuesIn(),用于传入数组或者容器

        int a[3]={1,2,3};

        Testing::ValuesIn(a)

        还有bool()用来判断false/true   

以上完成相同用例,完成多次测试

------------------------------------------------事件 CASE------------------------------------------------------------------

                                                        gtest事件

1 setup及teardown

class CaseTestSmpl : public testing ::Test{proctected:virtual void SetUp() {存放测试前需要初始化的事情(初始化函数,指针,申请的内存等)}virtual void TearDown() {存放测试后需要销毁的部分(回收函数,指针,申请的内存等)}int a ;// 生命周期在仅在一个suite中
}TEST_F(SUITE_TEST_SIMPLE,test1)
{
}TEST_F(SUITE_TEST_SIMPLE,test2)
{
}TEST_F(SUITE_TEST_SIMPLE,test3)
{
}

这里test1 ,2 3 在各自的suit中 会在最开始调用setup中的内容,测试结束后调用teardown中的内容

-----------------------------------------------事件 suite---------------------------------------------------------------------

testsuite 事件:在某一批案件中,第一个执行setup中的内容,最后一个suit执行teardown中的内容

//适用:多个测试函数,使用相同的变量,

class CaseTestSmpl : public testing ::Test{proctected:static void SetUpTestCase() {初始化全局变量等,生存周期为整个测试suite,直到所有suite执行完毕,由teardown进行回收}static void TearDownTestCase() {存放测试后需要销毁的部分}static int a ;  //真个测试中是唯一的
}

----------------------------------------------事件 gloable------------------------------------------------------------------

全局事件:所有用例执行前后,可用于组合类行为测试

class CaseTestSmpl : public testing ::Enviroment{proctected:virtual void SetUp() {存放测试前需要初始化的事情(初始化函数,指针,申请的内存等)}virtual void TearDown() {存放测试后需要销毁的部分(回收函数,指针,申请的内存等)}int a //全局有效}int _tmain(int argc,char* argv[])
{//注册全局事件 GlobalTestSmpltesting::AddGloableTestEnvironment(new GlobalTestSmpl);testing::InitGobalTest(&argc,argv);return RUN_ALL_TESTS(); }

总结: 通过setup teardown 内部调用时机 以及不同事件的成员变量的生命周期来进行事件选择

--------------------------------------------------细节处理-------------------------------------------------------------------

实际使用问题:

1.当有时候没有打印错误信息时, 用输出流打印例如

TEST(ArraContent,Compara) {int a[]={1,2,3,4,5,6};int b[]={1,2,3,4,6,5};for (int i = 0;i < 6;i++){EXPECT_EQ(a[i],b[i]) <<"需要打印的信息"<< i;}
};

2 .使用cmake工程编译

全局CMakeLists.txt文件内容

cmake_minimum_required(VERSION 3.5)project(demo)set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)include_directories(src)   //src 为源码存放目录enable_testing()# 编译googletest
add_subdirectory(googletest)# 把待测源码编译成一个静态库
add_library(mycode STATIC src/test.cpp src/test.h)  # 编译测试用例
add_subdirectory(test)

 测试目录下的CMakeLists.txt内容如下

cmake_minimum_required(VERSION 3.5)set(This ExampleTest)set (SourcesExampleTest.cpp
)add_executable(${This} ${Sources})# 链接gtest库和自己编写的库
target_link_libraries(${This} PUBLICgtest_mainmycode
)add_test(NAME ${This}COMMAND ${This}
)


http://www.ppmy.cn/news/904014.html

相关文章

GT*

GT车厂在命名汽车型号时放GT在上面其实意思是Grand Touring&#xff08;超跑&#xff09;.即高性能高可 性的大马力跑车&#xff0c;而Grand Touring的意思也就转变为大马力的汽车&#xff0c;真正的GT应该说是纯种血统的跑车。而现在GT已被泛指为高性能跑车,再没分豪华与不豪华…

GTi

要理解GTi&#xff0c;首先要了解什么是GT&#xff0c;GT全称为Great Touring&#xff0c;意指高性能跑车&#xff0c;此处的T并非大家所误以为的turbo。而i也并非如有人所说是代表汽油&#xff0c;其实i是injection的缩写&#xff0c;是指该车是燃料注入式的。就是指汽油直接喷…

GT-suite2016最新

GT-suite2016新---版本许可过期问题 解决2021版本过期问题&#xff0c;有新的资源&#xff0c;大家一起学习 GT Suite 2016是美国Gamma Technologies公司自主研发的一款汽车仿真分析系列套装软件&#xff0c; 包括GT-POWER、GT-DRIVE、GT-COOL和GT-CRANK等六大模块&#xff…

HTML中gt的含义

在html里写& g t ; 页面输出 "> "

Android-App性能测试工具GT的使用方法

参考链接&#xff1a; https://www.cnblogs.com/syw20170419/p/7228145.html?utm_sourceitdadao&utm_mediumreferral https://www.cnblogs.com/lixy-88428977/p/10439195.html&#xff08;包含广播使用GT&#xff09; GT官方使用介绍文档地址&#xff1a;http://gt.qq.com…

GT常见问题

1.需要root&#xff1f; 大部分核心功能都需要root权限。需要root的功能有&#xff1a;FPS、Mem Assistant、Logcat日志、抓包、流畅度获取&#xff08;未开放&#xff09;。 2.root工具总弹出提示框要确认root&#xff1f; 这取决于安装的root工具&#xff0c;如果总出框干扰&…

GT工具详解(CPU、内存、流量、电量、帧率/流畅度)

GT文档地址&#xff1a;http://gt.qq.com/docs.html GT下载地址&#xff1a;http://gt.qq.com/download.html GT-F&Q地址&#xff1a;https://gt.qq.com/docs/a/AndroidGTFAQ2.2.6.pdf 快速入门教程&#xff1a;https://gt.qq.com/docs/a/GTAndroidQuickStart.pdf &#xf…

Redis - 为什么我要来安利你学习 Redis ?

目录 前言 一、Redis 的特性&#xff08;优点&#xff09; 1. Redis 是在内存中存储数据的 2.可编程性 3.可扩展性 4.持久化 5.支持集群 6.高可用 二、Redis 为什么快&#xff1f; 三、 Redis 使用场景 优势场景 1.将 Redis 当作数据库 2.作为缓存和存储 session …