首页 > 其他分享 >gtest测试框架

gtest测试框架

时间:2023-09-22 17:36:47浏览次数:35  
标签:框架 ASSERT gtest EXPECT 测试 TEST val2 val1 condition

GoogleTest简单使用

googleTest是谷歌公司发布的一个跨平台的C++单元测试框架

两种断言

  • 致命断言ASSERT_*:当断言失败时,产生致命错误,并终止当前函数
  • 非致命断言EXPECT_*:当断言失败时,产生非致命错误,并不会终止当前函数

常用的断言

ASSERT EXPECT Verifies
ASSERT_TRUE(condition) EXPECT_TRUE(condition) condition is true
ASSERT_FALSE(condition) EXPECT_FALSE(condition) condition is false
ASSERT_EQ(val1, val2) EXPECT_EQ(val1, val2) val1 == val2
ASSERT_NE(val1, val2) EXPECT_NE(val1, val2) 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

TEST使用

#include "gtest/gtest.h"

int Factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++)
        result *= i;
    return result;
}

//使用宏TEST(TestSuitName, TestName),组织不同场景的cases
//1. 负数case
TEST(FactorialTest, Negative) {
    EXPECT_EQ(1, Factorial(-5));
    EXPECT_EQ(1, Factorial(-1));
}
//2. 正数case
TEST(FactorialTest, Positive) {
    EXPECT_EQ(1, Factorial(1));
    EXPECT_EQ(1, Factorial(2)) << "Failed: xxxx"; //通过<<可以在断言出错时打印信息
}

//运行所有的case
int main(int argc, char *argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

TEST_F使用

test fiture是在gtest中为每个TEST都执行一些同样的操作,这样就可以避免每个TEST中重复的冗余过程。

要使用TEST_F,首先需要定义一个TestFixture类,该类需要继承testing::Test,同时需要实现以下两个虚函数和两个静态函数:

  • virtual void SetUp():在每个TEST_F测试案例运行前都会运行一次
  • virtual void TearDown():在每个TEST_F结束后都会运行一次
  • static void SetUpTestSuit:在第一个测试案例运行之前运行
  • static void TearDownTestSuit():在最后一个测试案例运行之后运行
#include <gtest/gtest.h>

class MyTestFixture : public testing::Test {
protected:
    // 在此处定义测试夹具的设置和清理代码
    void SetUp() override {
        // 在每个测试用例运行之前执行
        // 可以在这里初始化共享资源
    }

    void TearDown() override {
        // 在每个测试用例运行之后执行
        // 可以在这里清理共享资源
    }

    // 可以添加其他成员函数和成员变量
};

TEST_F(MyTestFixture, Test1) {
    // 在这里编写测试代码,可以使用测试夹具中的资源
    ASSERT_EQ(2 + 2, 4);
}

TEST_F(MyTestFixture, Test2) {
    // 在这里编写另一个测试,可以使用相同的测试夹具
    ASSERT_TRUE(true);
}

int main(int argc, char *argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

标签:框架,ASSERT,gtest,EXPECT,测试,TEST,val2,val1,condition
From: https://www.cnblogs.com/ray93/p/17722969.html

相关文章

  • 自动化测试-友好的第三方库
    自动化测试脚本开发中,总是会遇到各种数据处理,例如MOCK、URL处理、JSON数据处理、结果断言等,也会遇到所采用的测试框架不能满足当前需求,这些问题都需要我们自己动手解决。在强大的IT世界,我们遇到的百分之九十八问题,前辈们都遇到过并且给出了解决方案,有的无私前辈将其整理并开源,这些......
  • 集合框架和泛型
    1、setHashSet不重复,无序。TreeSet不重复,会自动排序,升序。importjava.util.TreeSet;importjava.util.Set;publicclassTree{publicstaticvoidmain(String[]args){Setset=newTreeSet<>();set.add("GG");set.add("gg")......
  • 一个简易的ORM框架的实现(二)
    框架目标什么是框架,框架能做到什么?把一个方向的技术研发做封装,具备通用性,让使用框架的开发者用起来很轻松。属性:通用性健壮性稳定性扩展性高性能组件化跨平台从零开始-搭建框架建立项目主键查询功能开发绑定实体一步一步的给大家推导:一边写一边测试从零开始-......
  • Typescript 测试驱动开发 TDD (15)
    异步测试(Asynchronoustests)正如我们在探索JavaScript和TypeScript时所看到的,我们编写的大部分代码都是异步的。这意味着我们无法准确控制回调函数何时被调用,或者Promise何时解析,因为我们正在等待一个超出我们控制范围的事件发生。这经常在单元测试中引起问题,在这种情况下,我们......
  • Typescript 测试驱动开发 TDD (14)
    返回值的监视器 (Spiesreturningvalues)当我们希望模拟函数的返回值时,我们可以轻松地从模拟实现中返回一个值。作为示例,请考虑以下类:1classMyMockedClass{2functionToBeMocked():number{3return5;4}5}在这里,我们有一个名为MyMockedCl......
  • selenium自动化测试-获取黄金实时价格
    最近黄金比较火爆,想要获取黄金实时价格,方便后续监控预警价格,一般实时刷新的网页数据都是动态加载的,需要用到selenium自动化测试获取动态页面数据。昨天学会了获取动态网页小说内容,同理也可以获取动态网页的黄金实时价格。第一步:先确定目标网址网上随便百度一下黄金实时价格: ......
  • JAVA中三种I/O框架——BIO、NIO、AIO
    一、BIO(BlockingI/O)BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间;在一般的场景中,多线程模型下的BIO是成本较低、收益较高的方式。但是,如果在高并发的场景下,过多的创建线程,会严重占据系统资源,降低系统对外界响应效率......
  • Basic认证与Digest认证在http服务的配置与测试
    一、Apache支持basic认证1.确定Apache服务器是否有这2种模块服务器装的apche一般会默认带这两个模块:auth_basic_modulemodules/mod_auth_basic.so、auth_digest_modulemodules/mod_auth_digest.so在http.conf中看能否找到LoadModuleauth_digest_modulemodules/mod_auth_d......
  • Typescript 测试驱动开发 TDD (13)
    Jest监视器 (Jestspies)Jest还提供了一种能够检查特定类方法是否被调用的能力,使用的是所谓的spy。考虑以下类定义:1classMySpiedClass{2testFunction(){3console.log(`testFunction()called`);4this.testSpiedFunction();5}6testSp......
  • Typescript 测试驱动开发 TDD (12)
    Jest模拟(Jestmocks)在测试我们的代码时,我们经常遇到这样的情况:我们希望确保某个特定函数被调用,或者它被使用正确的参数进行了调用。当一个特定函数按顺序调用其他函数以执行一些业务逻辑时,这种情况最常见。例如,我们可能会调用一个初始化函数,并且该初始化函数可能会调用多个RES......