Google Test使用教程

单元测试

Google Test本质上就是一个单元测试的框架。首先得明白什么是单元测试,一般意义上来说,单元测试在函数在整个工程运行起来之前,对该函数进行测试,来判断当前函数能否达到预期的效果。

我一直的理解是把这个单元测试当作是运行时检查来用,事实证明是不对的。

翻译于此处

使用Google Test

想要使用Google Test,你需要将Google Test编译为一个库并将你的测试代码链接到这个库上。官方针对一些当下流行的操作系统(使用平台)提供了一些用于构建这个过程的文件。

msvc/:适用于Visual Studio。 
xcode/:适用于Mac OS的Xcode开发环境 
make/:适用于GNU的cmake 
codegear/:适用于Borland C++ 编译 
CMakeLists.txt:用于CMake

一旦你能够编译Google Test库,你应该为你的测试程序创建一个工程。在对测试代码进行编译的时候,确保GTEST_ROOT/include位于头文件搜索路径的根目录下,以便于编译器可以找到gtest/gtest.h。将你建立的工程链接到Google Test库上(例如在Visual Studio中,可以通过在gtest.vcproj中添加一个依赖来实现。

基本概念

当使用Google Test的时候,往往是从写assertions开始的,这些断言用于检查条件是否为true。一个断言的结果可能是success,nonfatal failure或者fatal failure。若发生了fatal failureGoogle Test将会中断当前的功能;否则当前程序会继续正常运行。 
Tests使用assertions来确认被测试代码的行为。若测试奔溃或者产生了错误的assertion,那么就认为测试失败,否则认为测试成功。

一个测试实例包含多个测试,你可以将你的test打包到测试用例中,这反映了测试代码的结构。当多个测试实例在一个测试实例中时,这些实例需要共享一些通用的对象和子程序。你可以将其打包放入到一个固定的测试类中。一个测试程序可以包含多个测试实例。接下来会介绍如何从一个独立的断言级别来构建测试以及测试实例。

Assertions

Google Test assertions类似于函数的宏调用。你可以通过设置断言的行为来测试一个类或者函数。当一个assertion失败时,Google Test将会打印出assertion源码文件以及出错位置的行数,并带有一个失败相关的信息。你也可以自定义一些信息追加到Google Test的信息中去。

断言assertion是成对出现的,测试的是同一件事但是对于当前函数却施加着不同的影响。 当测试任务失败时,ASSERT_* versions生成失败信息并中断当前的功能。EXPECT_* versions 生成非致命性错误信息,这样的信息不会中断当前的任务。通常因为EXPECT_*可以容许在测试的过程中有更多的错误报告,因而被更多的使用。然而,当当前测试得到的错误会影响到接下来的任务时,最好还是使用ASSERT_*。因为一个测试失败的ASSERT_*会从当前函数中很快的返回出来,有可能会跳过清理代码的作用。这样的行为会导致内存的泄露。根据泄露的性质,这样的问题不一定值得被修复,因此将这样的想法保留在脑海中毕竟除了assertion错误外,还有堆检查错误。

为提供典型的失败信息,只需使用简单的<<符号来将这些信息流入宏中,例如:

ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";

for (int i = 0; i < x.size(); ++i) {
  EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}

任何字符串信息都可以使用上述的方式来进行自定义显示,尤其是C的string类和string对象。 

基本的 Assertions

这些基本的断言用于进行基础的true/false条件测试。

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false

记住,当这些assertion失败的时候,ASSERT_*产生一个致命的错误并从当前函数返回,与此相对的EXPECT_*产生一个nonfatal failure,可以允许程序继续执行下去。在任何一种情况下,assertion的错误就意味着包含测试的错误。 
可用平台:Linux,Windows,Mac

Binary Comparison

这一节描述的是assertions用于比较两个值的情形。

Fatal assertion Nonfatal assertion Verifies
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

猜你喜欢

转载自blog.csdn.net/mandagod/article/details/87711668