单元测试利器之google test

简介:
  一、概述
  gtest是 Google开源的一款跨平台的C++单元 测试框架,支持自动发现测试、断言集、用户定义的断言、death测试、致命与非致命的失败、类型参数化测试、各类运行测试的选项和XML的测试报告,更多信息请参看官网,也可以参看这里。
   二、安装
  点击这里下载gtest,当前最新的稳定版本是gtest-1.7.0,如下来安装gtest:
  #unzip gtest-1.7.0.zip
  #cd gtest-1.7.0
  #./configure
  #make
  确认lib/.libs目录下生成了libgtest.a和libgtest_main.a,这是测试程序需要链接的两个库。
   三、测试
  下面将举例说明如何应用gtest来做 单元测试
  1、被测试程序
  编写被测试程序,在foo.h中编写函数max,求两个数中的大数:
#ifndef __FOO_H__
#define __FOO_H__
int max(int a, int b)
{
return a>b?a:b;
}
#endif
  2、测试程序
  编写测试程序test_foo.cpp来对foo.h进行测试:
#include "gtest/gtest.h"
#include "foo.h"
TEST(foo, max)
{
EXPECT_EQ(2, max(2, 1));
EXPECT_EQ(3, max(2, 3));
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

 3、编译测试
#g++ -g test_foo_cpp -o test_foo \
#-I../gtest-1.7.0/include \
#../gtest-1.7.0/lib/.libs/libgtest.a \
#../gtest-1.7.0/lib/.libs/libgtest_main.a \
#-lpthread
  编译链接生成可执行文件test_foo,执行结果如下:
  4、测试说明
  (1)用TEST宏编写测试用例
  gtest提供了TEST宏来编写测试用例,这个宏有两个参数,这两个参数只是起到提示作用,可以根据需要如下理解或使用:
  (A)第一个参数表示测试用例名称,第二个参数表示测试名称;
  (B)第一个参数表示类名,第二个参数表示方法名;
  (C)第一个参数表示文件名,第二个参数表示函数名。
  比如前面test_foo.cpp中的TEST(foo, max)就是采用的(C)这种方式。
  (2)用EXPECT_*/ASSERT_*宏设置检查点
  gtest提供了一系列EXPECT_*和ASSERT_*宏在测试用例中设置检查点进行检查,EXPECT系列和ASSERT系列宏的区别在于:
  (A)EXPECT_*失败时,用例继续往下执行。
  (B)ASSERT_*失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。
  比如前面TEST(foo, max)函数中的语句EXPECT_EQ(2, max(2, 1))用于测试max(2, 1)的执行结果是否等于2,如果不相等,则用例执行失败,否则成功。
  (3)初始化环境变量设置用例
  gtest测试用例允许接收一系列命令行参数以进行一些初始化操作,通常在main函数中调用::testing::InitGoogleTest(&argc, argv)来初始化一些环境变量。
  (4)运行测试用例
  一切准备妥当后,接着就运行所有测试用例以完成单元测试。gtest提供了RUN_ALL_TEST()宏用于调用所有TEST宏编写的测试用例以达到我们的终极目标。   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
目录
相关文章
|
3月前
|
测试技术 程序员 C++
C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)
gtest是Google开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。另一方面,gmock并不是一个独立的测试框架,而是gtest的辅助框架,主要用于模拟没有实现的类的操作,以便在没有完整类的情况下进行测试。通过配合使用gtest和gmock,开发者可以编写出更为复杂且健壮的C++单元测试。
101 0
|
3月前
|
Java 测试技术 开发工具
IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."终极办法
IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."终极办法
63 0
|
8月前
|
Java 测试技术
深入探索 Java 中的 @Test 注解:优化单元测试流程的利器
在软件开发中,单元测试是保障代码质量和稳定性的重要手段之一。Java 中的 `@Test` 注解则为开发人员提供了一种方便、高效的方式来编写和执行单元测试。通过该注解,我们可以轻松地标记测试方法,自动化运行测试,并确保代码在各种情况下的正确性。本文将带您深入探索 Java 中的 `@Test` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
9月前
|
测试技术 Go Cloud Native
Go test 单元测试用起来
单元测试,是指对软件中的最小可测试单元进行检查和验证
|
11月前
|
Java 测试技术 Maven
IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."Empty test suite
IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."Empty test suite
269 0
|
测试技术 Android开发
单元测试JUnit Test
单元测试JUnit Test
110 0
单元测试JUnit Test
|
敏捷开发 测试技术 C#
Visual Studio 中的单元测试 UNIT TEST
TDD(Test-Driven Development) 测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。单元测试是最基本的测试步骤。位于整个产品开发流程V模型的最底部。
Visual Studio 中的单元测试 UNIT TEST
|
测试技术
IDEA自动在test包下生成junit单元测试文件
IDEA自动在test包下生成junit单元测试文件
166 0
IDEA自动在test包下生成junit单元测试文件
|
Java 测试技术 Apache
ABAP和Java的单元测试Unit Test
ABAP和Java的单元测试Unit Test
ABAP和Java的单元测试Unit Test
|
SQL 测试技术 API
SAP CDS view 单元测试框架 Test Double 介绍
SAP CDS view 单元测试框架 Test Double 介绍
145 0
SAP CDS view 单元测试框架 Test Double 介绍