GoogleTest 使用指南 | TEST 语法

Ubuntu安装GoogleTest 判断是否安装cmake 打开终端,输入cmake -v,如果没有安装,输入sudo apt-get install cmake。 下载googletest 打开终端输入:git clone https://github.com/google/googletest.git 编译安装 (1) # 进入下载的googletest目录 cd ~/Downloads/googletest-m... 阅读详情

GoogleTest 使用指南 | TEST 语法

宏名称用途使用场景
TEST基本测试独立的简单测试
TEST_F测试夹具需要共享设置/清理的测试
TEST_P参数化测试相同逻辑不同输入的测试
TYPED_TEST类型化测试测试模板类/函数
TYPED_TEST_P类型参数化测试更灵活的类型测试
FRIEND_TEST友元测试访问私有成员

TEST - 基本测试

TEST(测试套件名, 测试名)

TEST(TestSuiteName, TestName) {
    // 测试代码
}

命名规则:

  • 测试套件名:通常是被测试类或模块的名称
  • 测试名:描述具体测试的内容
  • 两者都必须是有效的 C++ 标识符(不能包含下划线)

示例:

// 测试数学函数
TEST(MathTest, Addition) {
    EXPECT_EQ(2 + 2, 4);
    EXPECT_EQ(5 + 7, 12);
}

TEST(MathTest, Multiplication) {
    EXPECT_EQ(3 * 4, 12);
    EXPECT_EQ(5 * 0, 0);
}

// 测试字符串操作
TEST(StringTest, Concatenation) {
    std::string s1 = "Hello";
    std::string s2 = "World";
    EXPECT_EQ(s1 + s2, "HelloWorld");
}

TEST(StringTest, Length) {
    std::string str = "Test";
    EXPECT_EQ(str.length(), 4);
}

TEST_F - 测试夹具

  1. 定义测试夹具类,继承 ::testing::Test 类
  2. 定义 SetUp() 和 TearDown() 方法
// 1. 定义测试夹具类
class TestFixtureName : public ::testing::Test {
protected:
    // 成员变量和方法
    void SetUp() override { }      // 每个测试前调用
    void TearDown() override { }   // 每个测试后调用
};

// 2. 使用 TEST_F 定义测试
TEST_F(TestFixtureName, TestName) {
    // 可以直接访问夹具类的成员
}

示例:

// 测试夹具类
class BankAccountTest : public ::testing::Test {
protected:
    // 构造函数(可选)
    BankAccountTest() {
        // 每个测试前都会创建新实例
    }
    
    // 每个测试前的设置
    void SetUp() override {
        account = std::make_unique<BankAccount>("John Doe", 1000.0);
        transaction_log.clear();
    }
    
    // 每个测试后的清理
    void TearDown() override {
        // 通常不需要,因为对象会自动销毁
        account.reset();
    }
    
    // 测试套件级别的设置(静态)
    static void SetUpTestSuite() {
        std::cout << "Starting BankAccount tests\n";
        database_connection = ConnectToTestDatabase();
    }
    
    // 测试套件级别的清理(静态)
    static void TearDownTestSuite() {
        std::cout << "Finishing BankAccount tests\n";
        database_connection.reset();
    }
    
    // 成员变量
    std::unique_ptr<BankAccount> account;
    std::vector<std::string> transaction_log;
    static std::unique_ptr<Database> database_connection;
};

// 静态成员初始化
std::unique_ptr<Database> BankAccountTest::database_connection;

// 使用 TEST_F
TEST_F(BankAccountTest, InitialBalance) {
    EXPECT_EQ(account->GetBalance(), 1000.0);
    EXPECT_EQ(account->GetOwner(), "John Doe");
}

TEST_F(BankAccountTest, Deposit) {
    account->Deposit(500.0);
    EXPECT_EQ(account->GetBalance(), 1500.0);
}

TEST_F(BankAccountTest, Withdraw) {
    account->Withdraw(200.0);
    EXPECT_EQ(account->GetBalance(), 800.0);
}

TEST_F(BankAccountTest, OverdraftProtection) {
    EXPECT_THROW(account->Withdraw(2000.0), std::runtime_error);
    EXPECT_EQ(account->GetBalance(), 1000.0);  // 余额不变
}

生命周期:

  1. SetUpTestSuite() - 测试套件级别的设置(静态)
  2. 执行单个测试:
    2.1. Constructor() - 测试类的构造函数
    2.2. SetUp() - 每个测试前的设置
    2.3. 执行测试函数体的内容
    2.4. TearDown() - 每个测试后的清理
    2.5. Destructor() - 测试类的析构函数
  3. TearDownTestSuite() - 测试套件级别的清理(静态)

示例:

class LifecycleTest : public ::testing::Test {
protected:
    LifecycleTest() { std::cout << "1. Constructor\n"; }
    ~LifecycleTest() { std::cout << "5. Destructor\n"; }
    
    void SetUp() override { std::cout << "2. SetUp\n"; }
    void TearDown() override { std::cout << "4. TearDown\n"; }
    
    static void SetUpTestSuite() { std::cout << "0. SetUpTestSuite\n"; }
    static void TearDownTestSuite() { std::cout << "6. TearDownTestSuite\n"; }
};

TEST_F(LifecycleTest, Test1) {
    std::cout << "3. Test1 body\n";
}

TEST_F(LifecycleTest, Test2) {
    std::cout << "3. Test2 body\n";
}

输出:

0. SetUpTestSuite
1. Constructor
2. SetUp
3. Test1 body
4. TearDown
5. Destructor
1. Constructor
2. SetUp
3. Test2 body
4. TearDown
5. Destructor
6. TearDownTestSuite

TEST_P - 参数化测试

  1. 定义参数化测试类
  2. 定义测试,使用参数进行测试
  3. 实例化测试
// 1. 定义参数化测试类
class TestClassName : public ::testing::TestWithParam<ParamType> {
    // GetParam() 获取当前参数
};

// 2. 定义测试
TEST_P(TestClassName, TestName) {
    ParamType param = GetParam();
    // 使用参数进行测试
    // ...	
}

// 3. 实例化测试
INSTANTIATE_TEST_SUITE_P(
    InstantiationName,
    TestClassName,
    ::testing::Values(param1, param2, ...)
);

示例:

// 测试质数判断函数
class PrimeTest : public ::testing::TestWithParam<int> {
public:
    bool IsPrime(int n) {
        if (n <= 1) return false;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
};

TEST_P(PrimeTest, CheckPrimality) {
    int n = GetParam();
    if (n == 2 || n == 3 || n == 5 || n == 7 || n == 11 || n == 13) {
        EXPECT_TRUE(IsPrime(n)) << n << " should be prime";
    } else if (n <= 15) {
        EXPECT_FALSE(IsPrime(n)) << n << " should not be prime";
    }
}

// 使用 Values 提供参数
INSTANTIATE_TEST_SUITE_P(
    SmallNumbers,
    PrimeTest,
    ::testing::Values(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
);

// 使用 Range 生成参数
INSTANTIATE_TEST_SUITE_P(
    RangeTest,
    PrimeTest,
    ::testing::Range(1, 20, 2)  // 1, 3, 5, 7, 9, 11, 13, 15, 17, 19
);

// 使用 ValuesIn 从容器获取参数
std::vector<int> GetTestNumbers() {
    return {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
}

INSTANTIATE_TEST_SUITE_P(
    FromVector,
    PrimeTest,
    ::testing::ValuesIn(GetTestNumbers())
);

多参数示例(使用元组):

calculator.h:

#pragma once

class Calculator {
public:
    double add(double a, double b);
    double subtract(double a, double b);
    double multiply(double a, double b);
    double divide(double a, double b);
    int factorial(int n);
};

calculator.cpp:

#include "calculator.h"

#include <stdexcept>

double Calculator::add(double a, double b)
{
    return a + b;
}

double Calculator::subtract(double a, double b)
{
    return a - b;
}

double Calculator::multiply(double a, double b)
{
    return a * b;
}

double Calculator::divide(double a, double b)
{
    if (b == 0) {
        throw std::invalid_argument("Division by zero");
    }
    return a / b;
}

int Calculator::factorial(int n)
{
    if (n == 0 || n == 1)
        return 1;
    return factorial(n - 1) * n;
}
#include "gtest/gtest.h"
#include "calculator.h"

// 测试计算器的多个操作
class CalculatorTest : public ::testing::TestWithParam<
    std::tuple<double, double, char, double>> {
};

TEST_P(CalculatorTest, Operations) {
    double a = std::get<0>(GetParam());
    double b = std::get<1>(GetParam());
    char op = std::get<2>(GetParam());
    double expected = std::get<3>(GetParam());
    
    Calculator calc;
    double result;
    
    switch (op) {
        case '+': result = calc.add(a, b); break;
        case '-': result = calc.subtract(a, b); break;
        case '*': result = calc.multiply(a, b); break;
        case '/': result = calc.divide(a, b); break;
    }
    
    EXPECT_NEAR(result, expected, 0.0001);
}

INSTANTIATE_TEST_SUITE_P(
    BasicOperations,
    CalculatorTest,
    ::testing::Values(
        std::make_tuple(2.0, 3.0, '+', 5.0),
        std::make_tuple(5.0, 3.0, '-', 2.0),
        std::make_tuple(4.0, 3.0, '*', 12.0),
        std::make_tuple(10.0, 2.0, '/', 5.0)
    )
);

// 使用 Combine 生成笛卡尔积
INSTANTIATE_TEST_SUITE_P(
    CombinedOperations,
    CalculatorTest,
    ::testing::Combine(
        ::testing::Values(1.0, 2.0),      // a
        ::testing::Values(3.0, 4.0),      // b
        ::testing::Values('+', '-'),      // op
        ::testing::Values(4.0, 5.0, -2.0, -3.0)  // expected (需要匹配)
    )
);

注意,CombinedOperations 这个测试会失败一部分。

自定义参数名称示例:

// 自定义参数名称生成器
class CustomNameTest : public ::testing::TestWithParam<int> {};

TEST_P(CustomNameTest, TestWithCustomName) {
    EXPECT_TRUE(GetParam() >= 0);
}

// 自定义名称函数
std::string CustomParamNameGenerator(
    const ::testing::TestParamInfo<int>& info) {
    return "Value_" + std::to_string(info.param);
}

INSTANTIATE_TEST_SUITE_P(
    CustomNames,
    CustomNameTest,
    ::testing::Values(0, 1, 42, 100),
    CustomParamNameGenerator  // 生成名称如:CustomNames/Value_42
);

TYPED_TEST - 类型化测试

  1. 定义测试夹具模板
  2. 声明要测试的类型
  3. 定义测试
// 1. 定义测试夹具模板
template <typename T>
class TypedTestFixture : public ::testing::Test {
    // 使用 TypeParam 访问类型
};

// 2. 声明要测试的类型
typedef ::testing::Types<Type1, Type2, ...> MyTypes;
TYPED_TEST_SUITE(TypedTestFixture, MyTypes);

// 3. 定义测试
TYPED_TEST(TypedTestFixture, TestName) {
    // TypeParam 是当前测试的类型
}

示例 1:STL 容器

// 测试不同类型的容器
template <typename T>
class ContainerTest : public ::testing::Test {
protected:
    T container;
    
    void SetUp() override {
        // 添加测试数据
        container.push_back(1);
        container.push_back(2);
        container.push_back(3);
    }
};

// 要测试的容器类型
typedef ::testing::Types<
    std::vector<int>,
    std::deque<int>,
    std::list<int>
> ContainerTypes;

TYPED_TEST_SUITE(ContainerTest, ContainerTypes);

TYPED_TEST(ContainerTest, InitialSize) {
    EXPECT_EQ(this->container.size(), 3);
}

TYPED_TEST(ContainerTest, Clear) {
    this->container.clear();
    EXPECT_TRUE(this->container.empty());
}

TYPED_TEST(ContainerTest, FrontBack) {
    EXPECT_EQ(this->container.front(), 1);
    EXPECT_EQ(this->container.back(), 3);
}

示例 2:测试数值类型

template <typename T>
class NumericTest : public ::testing::Test {
public:
    T Add(T a, T b) { return a + b; }
    T Multiply(T a, T b) { return a * b; }
};

typedef ::testing::Types<int, long, float, double> NumericTypes;
TYPED_TEST_SUITE(NumericTest, NumericTypes);

TYPED_TEST(NumericTest, Addition) {
    TypeParam a = static_cast<TypeParam>(2);
    TypeParam b = static_cast<TypeParam>(3);
    EXPECT_EQ(this->Add(a, b), static_cast<TypeParam>(5));
}

TYPED_TEST(NumericTest, Multiplication) {
    TypeParam a = static_cast<TypeParam>(4);
    TypeParam b = static_cast<TypeParam>(5);
    EXPECT_EQ(this->Multiply(a, b), static_cast<TypeParam>(20));
}

TYPED_TEST_P - 类型参数化测试

  1. 定义测试夹具模板
  2. 声明测试套件
  3. 定义测试
  4. 注册测试
  5. 实例化测试
// 1. 定义测试夹具模板
template <typename T>
class TypeParamTest : public ::testing::Test {};

// 2. 声明测试套件
TYPED_TEST_SUITE_P(TypeParamTest);

// 3. 定义测试
TYPED_TEST_P(TypeParamTest, TestName1) { }
TYPED_TEST_P(TypeParamTest, TestName2) { }

// 4. 注册测试
REGISTER_TYPED_TEST_SUITE_P(TypeParamTest, TestName1, TestName2);

// 5. 实例化测试
typedef ::testing::Types<Type1, Type2> MyTypes;
INSTANTIATE_TYPED_TEST_SUITE_P(MyInstance, TypeParamTest, MyTypes);

示例:

// 定义通用队列测试
template <typename T>
class QueueTest : public ::testing::Test {
protected:
    std::queue<T> queue;
};

TYPED_TEST_SUITE_P(QueueTest);

TYPED_TEST_P(QueueTest, EmptyByDefault) {
    EXPECT_TRUE(this->queue.empty());
}

TYPED_TEST_P(QueueTest, PushAndSize) {
    this->queue.push(TypeParam());
    EXPECT_EQ(this->queue.size(), 1);
    this->queue.push(TypeParam());
    EXPECT_EQ(this->queue.size(), 2);
}

TYPED_TEST_P(QueueTest, PopReducesSize) {
    this->queue.push(TypeParam());
    this->queue.push(TypeParam());
    this->queue.pop();
    EXPECT_EQ(this->queue.size(), 1);
}

// 注册所有测试
REGISTER_TYPED_TEST_SUITE_P(
    QueueTest,
    EmptyByDefault,
    PushAndSize,
    PopReducesSize
);

// 可以在不同地方用不同类型实例化
typedef ::testing::Types<int, double> NumericTypes;
INSTANTIATE_TYPED_TEST_SUITE_P(Numeric, QueueTest, NumericTypes);

typedef ::testing::Types<std::string, std::vector<int>> ComplexTypes;
INSTANTIATE_TYPED_TEST_SUITE_P(Complex, QueueTest, ComplexTypes);

FRIEND_TEST - 友元测试

// 在被测试类中声明
class MyClass {
private:
    int private_member;
    void private_method();
    
    // 声明测试为友元
    FRIEND_TEST(TestSuiteName, TestName);
};

示例:

bank_vault.h:

#pragma once

#include <string>

class BankVault {
private:
    double secret_balance;
    std::string password;
    
    bool ValidatePassword(const std::string& pwd) {
        return pwd == password;
    }
    
    // 允许特定测试访问私有成员
    FRIEND_TEST(BankVaultTest, AccessPrivateMembers);
    FRIEND_TEST(BankVaultTest, TestPasswordValidation);
    
public:
    BankVault() : secret_balance(1000000), password("secret123") {}
    
    bool Withdraw(double amount, const std::string& pwd) {
        if (ValidatePassword(pwd) && amount <= secret_balance) {
            secret_balance -= amount;
            return true;
        }
        return false;
    }
};

test_bank_vault.cpp:

#include "gtest/gtest.h"
#include "bank_vault.h"

TEST(BankVaultTest, AccessPrivateMembers) {
    BankVault vault;
    // 可以直接访问私有成员
    EXPECT_EQ(vault.secret_balance, 1000000);
    EXPECT_EQ(vault.password, "secret123");
}

TEST(BankVaultTest, TestPasswordValidation) {
    BankVault vault;
    // 可以调用私有方法
    EXPECT_TRUE(vault.ValidatePassword("secret123"));
    EXPECT_FALSE(vault.ValidatePassword("wrong"));
}

TEST(BankVaultTest, TestWithdraw)
{
    BankVault vault;
    EXPECT_TRUE(vault.Withdraw(100, "secret123"));
    EXPECT_FALSE(vault.Withdraw(2000000, "secret123"));
    EXPECT_FALSE(vault.Withdraw(0, "wrong"));
}

结果:

➜  Clang 17.0.0 arm64-apple-darwin24.6.0 "/Users/xiye/CppProjects/unit-test-example/out/build/Clang 17.0.0 arm64-apple-darwin24.6.0/test_bank_vault"
Running main() from /Users/xiye/CppProjects/unit-test-example/out/build/Clang 17.0.0 arm64-apple-darwin24.6.0/_deps/googletest-src/googletest/src/gtest_main.cc
[==========] Running 3 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 3 tests from BankVaultTest
[ RUN      ] BankVaultTest.AccessPrivateMembers
[       OK ] BankVaultTest.AccessPrivateMembers (0 ms)
[ RUN      ] BankVaultTest.TestPasswordValidation
[       OK ] BankVaultTest.TestPasswordValidation (0 ms)
[ RUN      ] BankVaultTest.TestWithdraw
[       OK ] BankVaultTest.TestWithdraw (0 ms)
[----------] 3 tests from BankVaultTest (0 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 1 test suite ran. (0 ms total)
[  PASSED  ] 3 tests.
GoogleTest:TEST_F 简单点说,就是需要先定义一个继承于testing::Test的类,然后有两个虚函数,SetUp()用于每次构建测试项时需要完成的准备工作,TearDown()用于每次完成测试项的收尾工作。可以看到每个测试项开始时都会构造TestT2对象,然后调用SetUp准备数据,即使同一个测试用例的不同测试项之间,TestT2对象也不是共享的,每个测试项都会构造自己的TestT2对象。1.构造TestT2的对象,而由于TestT2的对象有成员T2,所以T2也会被构造。5.析构TestT2的对象,同时析构成员T2。 阅读详情

相关推荐

google test框架使用中文文档

搜集到的非常不错的google test框架、gmock使用的中文文档。

[googletest] --- 简易使用教程

如果需要生成.so库,生成官方sample的二进制文件,需要对源码最外层的CMakeLists.txt进行修改将L20修改为ON之后,可以在build目录下看到googletest自带的sample都编译为了可执行文件。

M2嵌入式 3129

别再手动画柜子了!用EPLAN导入STEP模型,5分钟搞定一个标准机柜

本文详细介绍了如何利用EPLAN Pro Panel的3D布局功能,快速将STEP模型转化为智能机柜宏,大幅提升电气工程设计效率。通过实战步骤解析,包括模型导入、智能解析、安装面定义及拼柜技巧,帮助工程师5分钟内完成标准机柜设计,避免传统手动建模的尺寸偏差问题。

weixin_26875109的博客 434

GoogleTest使用教程

GoogleTest是由Google开发的一个C++测试框架,支持Linux、Windows和macOS操作系统,使用Bazel或CMake构建工具。

zzy979481894的博客 1万+

3D Slicer + MONAI Bundle实战:如何用Wholebrainseg模型快速分割133个脑区(附避坑指南)

本文详细介绍了如何利用MONAI Model Zoo中的Wholebrainseg模型,在3D Slicer环境中高效分割133个脑区。文章重点提供了数据预处理、GPU推理加速及结果精修等实战技巧与避坑指南,旨在帮助医学影像研究者和开发者提升全脑分割的精度与效率。

310

ESP32-CAM与Thonny的完美搭配:从烧录到通信的完整流程

本文详细介绍了如何将ESP32-CAM与Thonny IDE完美结合,从固件烧录到通信测试的完整流程。通过硬件连接、MicroPython固件烧录、Thonny环境配置以及摄像头功能开发等步骤,帮助开发者快速搭建高效的物联网开发环境,实现图像采集与无线通信功能。

tomato的博客 1122

Google Test语法教程 基础篇(一)

程序员对C语言 C++,进行代码单元测试,最受欢迎的是使用Google Test框架。gtest语法灵活,高效,github上颇有人气。这篇文章将介绍gtest的基础的语法。google官方也有英文文档,但实战例子很少, 开发人员想自学使用也要花不少的精力,本文将结合实际代码,进行实战练习和演示。 语法: EXPECT_TRUE 期待值为真 使用场景:对真/假的条件进行判定 判定 //期待value等于2 EXPECT_TRUE(value==2); 语法: ASSERT_TRUE, 确保...

nowETforever的专栏 3897

基于深度强化学习的柔性作业车间动态调度

在追求敏捷和灵活的生产调度方面,处理不可预测的动态事件的能力变得越来越重要。与此同时,生产系统中的网络-物理融合产生了大量需要实时挖掘和分析的工业数据。为了便于这种实时控制,本研究提出了一种分层分布式的体系结构来解决动态柔性作业车间调度问题。采用双深度Q网络算法(DDQN)训练调度智能体,捕捉生产信息与调度目标之间的关系,为具有恒定任务到达的柔性作业车间实时做出调度决策。为了处理动态调度中问题的可变规格说明,提出了专门的状态和动作表示法。此外,还提出了一种代理奖励整形技术(surrogate reward

太剧烈的快乐与太剧烈的悲哀是有相同之点的——同样地需要远离人群! 1万+

Google Test入门教程

Google Test入门教程断言Test 架构一个简单的例子 断言 Assert:失败后终止 Expect:失败后继续 ASSERT_TRUE(condition); ASSERT_FALSE(condition); ASSERT_EQ(val1, val2); ASSERT_NQ(val1, val2); 失败后打印错误信息 EXPECT_EQ(val1, val2) << "val1 and va2 differ; Test 架构 TEST TestSuitName = 测试的函数名

I_ren的博客 1901

信息系统项目管理师(高项)重点!

学习高项自己做的笔记

PanJWei的博客 3301

【模型解读】【代码复现】Segment Anything Model(SAM)

Meta AI的一个新的人工智能模型,只需一次点击就能 "分割出 "任何图像中的任何物体! SAM是一个可提示的分割系统,对不熟悉的物体和图像具有zero-shot的概括性,并且不需要额外的训练。

lalula的博客 2万+

GoogleTest测试框架介绍(二)

本系列文章主要介绍GoogleTest(也称“GTest”)测试框架的相关知识,同时通过一些示例程序介绍GoogleTest测试框架的使用方法。本文为系列文章的第二篇,主要通过一些示例程序介绍GoogleTest测试框架的使用方法。

liitdar的博客 1万+

【Tableau】解决订阅报表PDF中文显示为乱码(方框)问题

一、问题描述 在tableau server网页端报表中文字符能正常显示,但在订阅后发送到邮箱时,以图片格式呈现的内容中中文字符显示为方框。 网页端报表能正常显示中文字符: 邮件中的报表不能正常显示中文字符: 二、问题分析 网页端字符显示情况是由html编码决定的,而tableau生成图片时是通过所部署的服务器的字体文件显示字体。因此可能是由于Linux服务器缺失相关的字体文件导致网页端选择的中文字体在服务器上缺失对应的字体文件导致的。则考虑在服务器引入对应的字体文件。 三、问题解决 1、查看服务器现有

why_not_study的博客 2833

GoogleTest之test

gtest中的测试宏TEST,TEST_F, TEST_P, TYPED_TEST, TYPED_TEST_SUITE_P, TYPED_TEST_P, FRIEND_TEST, SCOPED_TRACE, GTEST_SKIP和gtes中定义的类和函数归纳总结

u010378559的博客 852

简话 RAG 本地部署(DeepSeek + RAGFlow)

RAG = DeepSeek + OLlama + Docker + RAGFlow + Windows 11 简话 RAG 本地部署

捉虫客 de 博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

GoogleTest 使用指南 | 安装 GoogleTest

GoogleTest 使用指南 | 安装 GoogleTest

ProgramNovice的博客 1149

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

GoogleTest 使用指南 | 断言

GoogleTest 使用指南 | 断言

ProgramNovice的博客 1411

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

GoogleTest测试框架介绍(一)

本系列文章主要介绍GoogleTest(也称“GTest”)测试框架的相关知识,同时通过一些示例程序介绍GoogleTest测试框架的使用方法。本文为系列文章的第一篇,主要介绍GoogleTest测试框架的相关知识。

liitdar的博客 3万+

GoogleTest简介

GoogleTest简单介绍与使用

bdn_nbd的博客 820

GoogleTest终极指南:TYPED_TEST与TYPED_TEST_P区别详解

GoogleTest是Google开发的一款强大的C++单元测试框架,其中的**类型参数化测试**功能让开发者能够针对不同类型运行相同的测试逻辑。本文深入解析TYPED_TEST和TYPED_TEST_P这两个关键宏的区别与使用场景,帮助你掌握GoogleTest的高级测试技巧。🚀 ## 什么是类型参数化测试? 类型参数化测试是GoogleTest提供的一种高级测试功能,允许你为多个类型编写

gitblog_00125的博客 646

VS2017配置googletest

1.新建项目,项目名称为Test_Math 2. 右键管理NuGet程序包 - 搜索Googletest - 安装 3.添加文件test.cpp 4.示例代码 #define _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING 1 #include <gtest/gtest.h> class VecTest : public ...

万里归来少年心 2801

入门googletest

Google test是一种比较方便的C++测试框架,它可以帮助我们比较方便的进行测试代码,以及输出尽可能详细的失败信息,能够大大缩短我们测试代码的编写效率,而且这个框架的使用也比较简单。 之前还在学校学习过Junit框架,作为一个java程序员或多或少接触到这个框架,同样的C++的测试框架最常用的就是GTest。

Albert_weiku的博客 825

GoogleTest 使用指南 | 简介

GoogleTest 使用指南 | 简介

ProgramNovice的博客 1090

彻底掌握GoogleTest值参数化测试:INSTANTIATE_TEST_SUITE_P全面指南

你是否还在为测试不同输入组合而编写大量重复代码?是否在维护多组测试数据时感到力不从心?GoogleTest(简称GTest)的**值参数化测试(Value-Parameterized Tests)** 正是解决这些问题的利器。通过`INSTANTIATE_TEST_SUITE_P`宏,开发者可以轻松实现一套测试逻辑对多组数据的验证,大幅提升测试效率和代码可维护性。 读完本文后,你将掌握: - 值...

gitblog_00685的博客 1294

Googletest 实现简要分析

借助于 Googletest 测试框架,我们只需编写测试用例代码,并定义简单的 main() 函数,编译之后并运行即可以把我们的测试用例跑起来。(更详细的内容可参考 Googletest 入门)。但 main() 函数调用 RUN_ALL_TESTS() 时,是如何找到并运行我们编写的测试用例代码的呢?本文尝试找寻 Googletest 框架背后隐藏的这些秘密。(代码分析基于 git@github...

tq08g2z的专栏 1134

GoogleTest(C++)使用教程

GoogleTest是由Google开发的一个C++测试框架,支持Linux、Windows和macOS操作系统,使用Bazel或CMake构建工具。

weixin_53469585的博客 2777
上一篇: GoogleTest 使用指南 | 安装 GoogleTest
下一篇: GoogleTest 使用指南 | DISABLED_ 前缀
UestcXiye
博客等级 码龄8年 9029粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值