http://code.google.com/p/googletest/
Google为其各种平台(Linux、Mac OS X、Windows、Windows CE、Symbian等)上的C++测试而设计的框架。基于xUnit架构。支持自动测试发现、丰富的断言集、用户自定义断言、死亡测试、致命和非致命失败、测试运行的多种选项以及XML测试报告生成。
有关更多信息,请参阅上述项目页面以及邮件列表进行问题咨询、讨论和开发。此外,在OFTC(irc.oftc.net)上有#gtest的IRC频道。请加入我们!
Google Test设计用于在使用您的项目中构建和使用时具有相当低的要求,但仍有一些。目前,我们支持Linux、Windows、Mac OS X和Cygwin。我们还将尽最大努力支持其他平台(例如Solaris、AIX和z/OS)。然而,由于Google Test项目的核心成员无法访问这些平台,Google Test可能存在一些未解决的问题。如果您在自己的平台上发现问题,请通知[email protected]。欢迎提交修复这些问题的补丁!
以下是使用源代码包(如下所述)构建和使用Google Test的基本要求
此外,如果您想使用提供的CMake脚本构建示例,无论使用哪种平台,都需要CMake 2.6.4或更高版本。
我们欢迎补丁。如果您计划提交补丁,您需要从SVN快速检出构建Google Test及其测试(如下所述),这有更进一步的要求
获取Google Test源代码主要有两种方式:您可以使用您喜欢的归档格式下载稳定的源代码版本,或者直接从我们的子版本控制(SVN)仓库检出源代码。SVN检出需要一些额外的步骤和系统中的额外软件包,但它允许您跟踪最新的开发并对补丁进行更加便捷的修改,因此我们强烈推荐这种方式。
Google Test以版本化的源代码包形式发布,可以通过下载页面[1]下载。提供了多种不同的归档格式,但这些格式的唯一区别在于处理它们所使用的工具以及生成文件的尺寸。请下载您最熟悉的格式。
[1] http://code.google.com/p/googletest/downloads/list
下载完毕后,使用您喜欢的工具展开该包。这将生成一个名为 "gtest-X.Y.Z" 的新目录,其中包含所有的源代码。以下是在Linux系统中的几个例子
tar -xvzf gtest-X.Y.Z.tar.gz tar -xvjf gtest-X.Y.Z.tar.bz2 unzip gtest-X.Y.Z.zip
为了检出Google Test的主要分支(也称为 "trunk"),运行以下Subversion命令
svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
为了构建Google Test以及使用它的测试,您需要告诉您的构建系统如何找到它的头文件和源文件。具体的方式取决于您使用哪种构建系统,通常是直截了当的。
假设您将Google Test放置在目录 ${GTEST_DIR} 中。要构建它,创建一个库构建目标(或项目,如Visual Studio和Xcode中所称)来编译
${GTEST_DIR}/src/gtest-all.cc
使用
${GTEST_DIR}/include 和 ${GTEST_DIR}
作为头文件搜索路径。假设是Linux-like系统并用gcc,下面的命令可以这样执行
g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc ar -rv libgtest.a gtest-all.o
接下来,您应该在头文件搜索路径中将 ${GTEST_DIR}/include 与测试源文件编译,并将其与 gtest 和任何其他必要的库链接
g++ -I${GTEST_DIR}/include path/to/your_test.cc libgtest.a -o your_test
例如,make/ 目录中包含一个 Makefile,您可以在GNU make可用的系统中使用它来构建Google Test(如Linux、Mac OS X和Cygwin)。它不会尝试构建Google Test的测试工作,而仅仅是构建Google Test库和示例测试。您可以用它作为构建脚本的起点。
如果您的环境默认设置正确,以下命令应能成功执行
cd ${GTEST_DIR}/make make ./sample1_unittest
如果出现错误,尝试调整 make/Makefile 中的内容使其消失。make/Makefile 中有如何进行的说明。
Google Test附带一个CMake构建脚本(CMakeLists.txt),可以在广泛的平台上使用( "C" 代表跨平台)。如果您尚未安装CMake,可以免费从 http://www.cmake.org/ 下载。
CMake通过生成用于所选编译环境的本机makefile或构建项目来工作。典型的流程从
mkdir mybuild # 创建一个存放构建输出的目录。cd mybuild cmake ${GTEST_DIR} # 生成本地构建脚本。
如果您想构建Google Test的示例,应将最后一条命令替换为
cmake -Dgtest_build_samples=ON ${GTEST_DIR}
如果在*nix系统上,现在应该可以看到当前目录中的Makefile。只需输入'make'即可构建gtest。
如果您使用Windows并且已安装Visual Studio,将创建gtest.sln文件和多个.vcproj文件。然后您可以使用Visual Studio来构建它们。
在已安装Xcode的Mac OS X上,将生成.xcodeproj文件。
在我们选择CMake之前,我们一直为Visual Studio、Xcode和Autotools提供手动维护的构建项目/脚本。虽然我们继续提供它们以方便起见,但它们已不再积极维护。我们强烈建议您按照前两个部分的说明来将Google Test集成到现有的构建系统中。
如果您仍然需要使用旧版构建脚本,请按照以下步骤操作
msvc\文件夹包含两个带有Visual C++项目的解决方案。使用Visual Studio打开gtest.sln或gtest-md.sln文件,并准备以与构建任何Visual Studio项目相同的方式构建Google Test。以"-md"结尾的文件使用Microsoft运行时库的DLL版本(/MD或/MDd编译器选项)。没有该后缀的文件使用运行时库的静态版本(/MT或/MTd选项)。请注意,必须使用相同的选项编译gtest和测试代码。如果您使用Visual Studio 2005或更高版本,我们推荐使用-md版本,因为这些版本中Visual Studio的新项目默认为/MD。
在Mac OS X上,使用Xcode打开xcode/文件夹中的gtest.xcodeproj。构建"gtest"目标。通用二进制框架将最终在您选择的构建目录中(在Xcode "首选项..." -> "构建"选项卡中选择,默认为xcode/build)。或者,在命令行中输入
xcodebuild
这将构建您默认构建位置中的"Release"配置的gtest.framework。有关构建不同配置和在不同位置构建的信息,请参阅"xcodebuild"手册页面。
Google Test可以在各种环境中使用。默认配置可能无法直接使用(或者可能效果不佳)。但是,您可以通过在编译器命令行上定义控制宏来轻松调整Google Test。通常,这些宏的命名类似于GTEST_XYZ,并将它们定义为1或0以启用或禁用特定功能。
以下列出最常用的宏。关于完整列表,请参阅文件include/gtest/internal/gtest-port.h。
一些Google Test功能需要C++技术报告1(TR1)的tuple库,目前并非所有编译器都提供该库。好消息是,Google Test实现了一个足够满足其自身需求的TR1 tuple子集,并将在编译器不提供TR1 tuple时自动使用它。
通常,您不需要关心Google Test使用哪个tuple库。但是,如果您的项目已经使用TR1 tuple,您需要告诉Google Test使用您项目剩余部分使用的相同的TR1 tuple库,否则两个tuple实现将冲突。为此,请添加
-DGTEST_USE_OWN_TR1_TUPLE=0
在编译Google Test和您的测试时需要添加到编译器标志中。如果您想强制Google Test使用自己的tuple库,只需将其添加到编译器标志中
-DGTEST_USE_OWN_TR1_TUPLE=1
。
如果您不希望Google Test使用tuple,请添加
-DGTEST_HAS_TR1_TUPLE=0
,这将禁用所有使用tuple的特性。
当pthread库可用时,Google Test是线程安全的。在包含"gtest/gtest.h"之后,您可以检查GTEST_IS_THREADSAFE宏以确定这一点(如果宏定义为1,则是yes;如果未定义,则是no)。
如果Google Test无法正确检测您的环境中是否有pthread,您可以强制使用
-DGTEST_HAS_PTHREAD=1
或
-DGTEST_HAS_PTHREAD=0
。当Google Test使用pthread时,您可能需要向编译器和/或连接器添加标志以选择pthread库,否则可能会收到连接错误。如果您使用CMake脚本或已弃用的Autotools脚本,这会为您处理。如果您使用自定义构建脚本,您需要阅读您的编译器和连接器的手册,以了解需要添加哪些标志。
Google Test非常紧凑,因此大多数用户可以将其作为静态库构建以便简化。如果喜欢,您可以选择将Google Test作为共享库使用(在Windows上称为DLL)。
要编译gtest作为共享库,请将
-DGTEST_CREATE_SHARED_LIBRARY=1
添加到编译器标志。您还需要告诉连接器生成共享库,有关如何操作的说明,请参阅连接器的手册。
要编译使用gtest共享库的测试,请将
-DGTEST_LINKED_AS_SHARED_LIBRARY=1
添加到编译器标志。
注意:当使用一些编译器(例如GCC)时,上述步骤在技术上可能不是必需的,但如果我们决定提高库的加载速度,则可能在未来变得必要(有关详细信息,请参阅http://gcc.gnu.org/wiki/Visibility)。因此,建议在将Google Test用作共享库时始终添加上述标志。否则,Google Test的未来版本可能会破坏您的构建脚本。
在C++中,宏不遵守名称空间。因此,如果两个库都定义了同名的宏,则在包含两个定义时将发生冲突。如果Google Test的宏与另一个库冲突,您可以强制Google Test更改宏的名称以避免冲突。
具体来说,如果Google Test和某些其他代码都定义了宏FOO,您可以添加
-DGTEST_DONT_DEFINE_FOO=1
到编译器标志,以告诉Google Test将宏的名称从FOO更改为GTEST_FOO。目前,FOO可以是FAIL、SUCCEED或TEST。例如,使用-DGSTEST_DONT_DEFINE_TEST=1,您需要编写
GTEST_TEST(SomeTest, DoesThis) { ... }
而不是
TEST(SomeTest, DoesThis) { ... }
来定义测试。
我们努力使Google Test版本向后兼容。但是,有时为了用户的长期利益,我们必须做出一些破坏性更改。本节描述了如果您从Google Test的早期版本升级需要执行的操作。
您可能需要明确启用或禁用Google Test的TR1 tuple库。请参阅“选择TR1 Tuple库”小节中的说明。
不再官方支持 Autotools 编译脚本(configure + make)。建议您迁移到自己的构建系统或使用 CMake。如果仍然需要使用 Autotools,可以查阅 Google Test 1.4.0 的 README 文件中的说明。
在支持 pthread 库的平台中,Google Test 会使用它来保证线程安全。有关这对于构建脚本意味着什么,请参阅“多线程测试”章节。
如果您使用禁用异常的 Microsoft Visual C++ 7.1 编译器,Google Test 将无法编译。这应该只会影响极少数人,因为包括大部分 STL(包括)在此模式下都无法编译。我们决定停止支持它,以极大地简化 Google Test 的实现。
本节讨论了如何对 Google Test 进行自定义修改。
为了确保您的更改按预期工作,并且不会破坏现有功能,您需要编译并运行 Google Test 的自检测试。为了这样做,您可以使用 CMake
mkdir mybuild cd mybuild cmake -Dgtest_build_tests=ON ${GTEST_DIR}
请确保已经安装 Python,因为 Google Test 的部分测试是用 Python 编写的。如果 CMake 命令抱怨找不到 Python(“Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE)”),请尝试明确告诉它您的 Python 可执行文件的位置
cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR}
接下来,您可以构建 Google Test 及其所有自检测试。在 *nix 上,这通常是通过 'make' 完成的。要运行测试,请执行
make test
所有测试应通过。
Google Test 的一些源文件是通过脚本从模板(非 C++ 意义上的模板)生成的。模板文件命名为 FOO.pump,其中 FOO 是它将生成的文件的名称。例如,文件 include/gtest/internal/gtest-type-util.h.pump 用于生成同一目录下的 gtest-type-util.h。
通常您不需要担心重新生成源文件,除非您需要修改它们。在这种情况下,您应该修改相应的 .pump 文件,然后运行 pump.py Python 脚本来重新生成它们。您可以在 scripts/ 目录中找到 pump.py。请阅读 Pump 手册[2]了解如何使用它。
[2] http://code.google.com/p/googletest/wiki/PumpManual
我们欢迎补丁。请阅读 Google Test 开发者指南[3]了解如何贡献。特别是,请确保您已签署贡献许可协议,否则我们无法接受您的补丁。
[3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide
祝您测试愉快!