最近在写项目的时候,学到了许多关于软件测试的知识,也不断的使用新的测试框架和测试工具,每次总是机械式的拼接其他人的代码,代码发生错误也不知道怎么解决,因此我打算直接将其学一遍,以便为了更灵活的写测试代码
编译和安装
下载地址:Google Test Github网站
然后直接在CMakeLists.txt
引入就好了
include_directories(include) # 设置include路径
set(CXXFLAGS -std=c++11 -lgtest -lpthread)
add_compile_options(${CXXFLAGS})
target_link_libraries(test gtest pthread) # 链接gtest静态库
框架使用
框架的使用主要分为几个模块:Assertions
、Google Testing
、Google Mocking
、Matchers
、Actions
Assertions
这一部分主要是一些断言和比较宏定义,内容较多,以下是一部分,想看全部的可以去看源码
这一部分理解比较简单,不做概述
#define EXPECT_THROW(statement, expected_exception) \
GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
#define EXPECT_NO_THROW(statement) \
GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
#define EXPECT_ANY_THROW(statement) \
GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)
#define ASSERT_THROW(statement, expected_exception) \
GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
#define ASSERT_NO_THROW(statement) \
GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
#define ASSERT_ANY_THROW(statement) \
GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)
Google Testing
这部分是框架的主要部分,也是开发人员接触最多的地方
首先来介绍三个常用的宏:TEST
、TEST_F
、TEST_P
TEST
:一般测试,在其内部设置断言
TestSuiteName
定义了测试套件名称,TestName
定义了自定义测试名
- 注意这两个的命名不要包括下划线
_
TEST(TestSuiteName, TestName)
{
// statements
}
TEST_F
:多样测试,就是多种不同情况的测试中都会使用相同一份的测试数据的情况
TEST_P(TestFixtureName, TestName)
{
// statements
}
TEST_P
:值参数化测试,自动化产生输入参数进行测试
TEST_P(TestFixtureName, TestName