GTest是Google開發的跨平台而且開源的C++單元測試框架,很好很強大。
下載地址:https://code.google.com/p/googletest/ 。
關於GTest在Windows下使用,CoderZh給出了十分詳盡的使用指南:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 。
我的工作環境:Ubuntu12.04, python 2.7, Makefile,SVN等
我用的是svn下載的。
svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
得到最新版的gtest,成功可以看到文件夾gtest-svn。
先進入文件夾:
$cd gtest-svn
編譯生成gtest-all.o文件(注意-I後無空格):
$g++ -I./include -I./ -c ./src/gtest-all.cc
再生成.a靜態庫文件:
$ ar -rv libgtest.a gtest-all.o
若成功,會在當前目錄下生成libgtest.a庫。可拷貝它到C++單元測試項目中去,以便使用。
實現兩個int變量的加減乘除功能。
//functions.h #ifndef _FUNCTIONS_H #define _FUNCTIONS_H int add(int one,int two); int myMinus(int one,int two); int multiply(int one,int two); int divide(int one,int two); #endif
//functions.cpp #include "functions.h" int add(int one,int two){ return one+two; } int myMinus(int one,int two){ return one-two; } int multiply(int one,int two){ return one*two; } int divide(int one,int two){ return one/two; }
1、編寫單元測試代碼functionsTest.cpp
//functionsTest.cpp #include "gtest/gtest.h" #include "functions.h" TEST(AddTest,AddTestCase){ ASSERT_EQ(2,add(1,1)); } TEST(MinusTest,MinusTestCase){ ASSERT_EQ(10,myMinus(25,15)); } TEST(MultiplyTest,MutilplyTestCase){ ASSERT_EQ(12,multiply(3,4)); } TEST(DivideTest,DivideTestCase){ ASSERT_EQ(2,divide(7,3)); }
2、編寫測試代碼TestAll.cpp
//TestAll.cpp #include "gtest/gtest.h" #include <iostream> using namespace std; int main(int argc,char* argv[]) { //testing::GTEST_FLAG(output) = "xml:"; //若要生成xml結果文件 testing::InitGoogleTest(&argc,argv); //初始化 RUN_ALL_TESTS(); //跑單元測試 return 0; }
1、編譯
1) 復制gtest庫文件
在GTestApp目錄下新建lib目錄,並復制libgtest.a到其中。
$mkdir lib
$cp <the path>/libgtest.a lib
2) 復制gtest頭文件
gtest1.6.0目錄下的include包含了需使用到的頭文件。把include復制到GTestApp中來。
3)編譯和鏈接
$ g++ -o functions.o -c functions.cpp
$ g++ -o functionsTest.o -c funciontsTest.cpp -I./include
$ g++ -o TestAll.o -c TestAll.cpp -I./include
鏈接:
$ g++ -o main *.o -I./include -L./lib -lgtest -lpthread #注意不是-libgtest,同時需要用到 libpthread這個庫
最後可以得到一個main的可執行文件
2、運行與測試
$./main
[==========] Running 4 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN ] AddTest.AddTestCase
[ OK ] AddTest.AddTestCase (0 ms)
[----------] 1 test from AddTest (1 ms total)
[----------] 1 test from MinusTest
[ RUN ] MinusTest.MinusTestCase
[ OK ] MinusTest.MinusTestCase (0 ms)
[----------] 1 test from MinusTest (0 ms total)
[----------] 1 test from MultiplyTest
[ RUN ] MultiplyTest.MultiplyTestCase
[ OK ] MultiplyTest.MultiplyTestCase (0 ms)
[----------] 1 test from MultiplyTest (1 ms total)
[----------] 1 test from DivideTest
[ RUN ] DivideTest.DivideTestCase
[ OK ] DivideTest.DivideTestCase (0 ms)
[----------] 1 test from DivideTest (3 ms total)
[----------] Global test environment tear-down
[==========] 4 tests from 4 test cases ran. (8 ms total)
[ PASSED ] 4 tests.
如果需要得到xml文件的話,可以這麼做
首先先在main函數打開生成函數
testing::GTEST_FLAG(output) = "xml:";
再重新編譯,生成main可執行文件。再執行下面操作。
$ ./main --gtest_output=xml
[==========] Running 4 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN ] AddTest.AddTestCase
[ OK ] AddTest.AddTestCase (0 ms)
[----------] 1 test from AddTest (1 ms total)
[----------] 1 test from MinusTest
[ RUN ] MinusTest.MinusTestCase
[ OK ] MinusTest.MinusTestCase (0 ms)
[----------] 1 test from MinusTest (1 ms total)
[----------] 1 test from MultiplyTest
[ RUN ] MultiplyTest.MultiplyTestCase
[ OK ] MultiplyTest.MultiplyTestCase (0 ms)
[----------] 1 test from MultiplyTest (1 ms total)
[----------] 1 test from DivideTest
[ RUN ] DivideTest.DivideTestCase
[ OK ] DivideTest.DivideTestCase (0 ms)
[----------] 1 test from DivideTest (0 ms total)
[----------] Global test environment tear-down
[==========] 4 tests from 4 test cases ran. (4 ms total)
[ PASSED ] 4 tests.
讓我們再看下當前目錄,用ls命令:可以看到有一個main.xml的文件,大功告成。
本文參考:
http://graybull.is-programmer.com/posts/37871.html
http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html
https://code.google.com/p/googletest/