Win32平台如何编译使用Google test编写的单元测试?
在Win32平台如何编译单元测试的代码?(readme文件并没有明确指出,我们需要自行配置)
1. 单元测试从何处运行?
利用Google test编写单元测试,我们只需要使用其提供的宏来定义测试,不需像CppUnit那样还要编写运行测试的代码,从“Linux平台如何编译使用Google test写的单元测试?”也可以看出,我们并没有编写main函数,那么,利用google test编写的单元测试,从何处开始执行?
其main函数位于gtest_main.cc文件中,如下。
#include
#include
int main(int argc, char **argv) {
std::cout << "Running main() from gtest_main.cc/n";
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
查看google test自带的sample代码,我们发现每个sample的单元测试代码都没有单独编写main函数,因此,要想运行自己编写的单元测试,需要将gtest-all.cc和gtest_main.cc编译到工程并连接,从“Linux平台如何编译使用Google test写的单元测试?”中的makefile文件也能看出。当然,我们也可以不是用google test提供的main函数,而自己改写。
2. Win32平台如何配置?
综上分析,在Win32平台,要编译、运行自己编写的单元测试,要进行以下设置(以vs2005为例)。
假设环境变量
GTEST_ROOT=E:/opensource/gtest-1.5.0
2.1 在IDE中编译
Step1. 设置vs2005
Tools->options->projects and solutions->VC++ directories
->Include files: 添加$(GTEST_ROOT)/include、$(GTEST_ROOT)
->Library files: 添加$(GTEST_ROOT)/lib
此处的Library files也可以不添加$(GTEST_ROOT)/lib。
Step2. 将gtest_main.cc和gtest-all.cc添加到工程
Step3. 编译使用google test编写的单元测试
2.2 通过命令行编译
(1) 配置
通过命令行编译,需要设置环境变量INCLUDE,在其后添加%GTEST_ROOT%;%GTEST_ROOT%/include
例如,笔者机器上环境变量INCLUDE的值为:
%VCInstallDir%/ATLMFC/INCLUDE;%VCInstallDir%/INCLUDE;%VCInstallDir%/PlatformSDK/include;%VSInstallDir%/SDK/v2.0/include;%ACE_ROOT%;%BOOST_1_40_ROOT%;%CPPUNIT_ROOT%/include;%GTEST_ROOT%;%GTEST_ROOT%/include
(2) 命令
环境变量INCLUDE配置后,该如何写命令呢?
如“Linux平台如何编译使用Google test写的单元测试?”假设要测试的代码在sample.cpp文件中,编写的单元测试代码在test.cpp中,要编译该单元测试,命令行如下:
cl /wd 4530 /nologo test.cpp sample.cpp %GTEST_ROOT%/src/gtest_main.cc %GTEST_ROOT%/src/gtest-all.cc
当然,我们可以写一个bat文件自动执行,如make.bat,内容如下。
@echo off
echo start to compile all examples
echo.
cl /wd 4530 /nologo test.cpp sample.cpp %GTEST_ROOT%/src/gtest_main.cc %GTEST_ROOT%/src/gtest-all.cc
echo.
del *.obj
echo done. bye.
pause