googleTest测试相关知识

本文探讨了当前背景下GoogleTest在软件测试中的重要性,引用CSDN文章详细解读,并对其他相关技术进行初步介绍,揭示测试框架在开发过程中的价值。
摘要由CSDN通过智能技术生成

提示:文章

文章目录

前言

前期疑问:
本文目标:


一、背景

最近写的代码需要加测试套,一开始很懵逼,然后尝试百度调试,最后也被我搞出来了,还行。

二、googleTest初识

2.1 googleTest

https://blog.csdn.net/weixin_44244190/article/details/129278803

三、# 实现gtest

参考文章:C++单元测试工具——googletest

2.1构建工程

将googleTest文件夹和main.cpp文件和test_TESTF.cpp文件和test_math.cpp文件放在同级目录。

googlTest文件夹下载地址:官网:https://github.com/google/googletest

main.cpp文件

#include <gtest/gtest.h>
#include <iostream>

#if defined(_MSC_VER)
#include <direct.h>
    #define GetCurrentDir _getcwd
#elif defined(__unix__)
#include <unistd.h>
#define GetCurrentDir getcwd
#else
#endif

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

test_TESTF.cpp文件

#include <gtest/gtest.h>  // googletest header file
#include <iostream>

class googleMyTest : public testing::Test
{
public:
    static void SetUpTestCase()
    {
        std::cout << "SetUpTestCase" << std::endl;
    }

    static void TearDownTestCase()
    {
        std::cout << "TearDownTestCase" << std::endl;
    }

    virtual void SetUp()
    {
        std::cout << "SetUp" << std::endl;
    }

    virtual void TearDown()
    {
        std::cout << "TearDown" << std::endl;
    }
};

TEST_F(googleMyTest, my_test_f_1)
{
    int x = 1;
    EXPECT_EQ(x, 1);
}

test_math.cpp文件

#include <iostream>
#include "robot_math.h"

#include <gtest/gtest.h>

//这边的add、sub等函数可以是代码中的函数,可以在这边增加测试,看下函数输出是否符合预期。

TEST(add, test)
{
    auto res = add(10, 5);
    std::cout << "add res: " << res << std::endl;
}

TEST(sub, test)
{
    auto res = sub(10, 5);
    std::cout << "sub res: " << res << std::endl;
}

TEST(multiply, test)
{
    auto res = multiply(10, 5);
    std::cout << "multiply res: " << res << std::endl;
}

TEST(divide, test)
{
    auto res = divide(10, 5);
    std::cout << "divide res: " << res << std::endl;
}

robot_math.cpp文件

#include "robot_math.h"

int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int multiply(int a, int b)
{
    return a * b;
}

int divide(int a, int b)
{
    return a / b;
}

robot_math.h文件

#ifndef ROBOT_MATH_H
#define ROBOT_MATH_H

int add(int a, int b);

int sub(int a, int b);

int multiply(int a, int b);

int divide(int a, int b);

#endif

2.2问题解决

类中不将SetUpTestCase函数设置成public,会报错如下

D:/AppData/CLion/testProj/test_googletest/googletest/googletest/include/gtest/internal/gtest-internal.h:512:29: error: 'static void googleMyTest::SetUpTestCase()' is private within this context
  512 |         GetNotDefaultOrNull(&T::SetUpTestCase, &Test::SetUpTestCase);

2.3 cmakelist.txt

cmake_minimum_required(VERSION 3.16)

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
message(${ProjectId})

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)

# 添加googletest库
add_subdirectory(googletest)

# 添加可执行文件
add_executable(${ProjectId}
        test_math.cpp
        robot_math.cpp
        test_TESTF.cpp
        main.cpp
)

# 链接googletest库
target_link_libraries(${ProjectId} gtest_main)

2.4 执行结果

D:\AppData\CLion\testProj\test_googletest\cmake-build-local\test_googletest.exe
[==========] Running 5 tests from 5 test suites.
[----------] Global test environment set-up.
[----------] 1 test from googleMyTest
SetUpTestCase
[ RUN      ] googleMyTest.my_test_f_1
SetUp
TearDown
[       OK ] googleMyTest.my_test_f_1 (1 ms)
TearDownTestCase
[----------] 1 test from googleMyTest (3 ms total)

[----------] 1 test from add
[ RUN      ] add.test
add res: 15
[       OK ] add.test (0 ms)
[----------] 1 test from add (2 ms total)

[----------] 1 test from sub
[ RUN      ] sub.test
sub res: 5
[       OK ] sub.test (0 ms)
[----------] 1 test from sub (2 ms total)

[----------] 1 test from multiply
[ RUN      ] multiply.test
multiply res: 50
[       OK ] multiply.test (0 ms)
[----------] 1 test from multiply (2 ms total)

[----------] 1 test from divide
[ RUN      ] divide.test
divide res: 2
[       OK ] divide.test (0 ms)
[----------] 1 test from divide (2 ms total)

[----------] Global test environment tear-down
[==========] 5 tests from 5 test suites ran. (32 ms total)
[  PASSED  ] 5 tests.

进程已结束,退出代码为 0

三、 googleTest调试

在Clion上调试。

使用gtest_main进行调试

cmakelist.txt如下

cmake_minimum_required(VERSION 3.16)

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
message(${ProjectId})

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -D_DEBUG")

# 添加googletest库
add_subdirectory(googletest)

# 添加可执行文件
add_executable(${ProjectId}
        test_math.cpp
        robot_math.cpp
        test_TESTF.cpp
        main.cpp
)

# 链接googletest库
target_link_libraries(${ProjectId} gtest_main)

这边需要注意的是一定要使用debug,使用release无法调试。

总结

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值