編譯安裝
- 配置編譯工具
- 編譯Google Test 需要cmake2.6 版本以及上想诅。
yum list | grep cmake # cmake --version # 查看 cmake 版本
- 支持C++11
- 編譯Google Test 需要cmake2.6 版本以及上想诅。
這里以Gtest 1.8.0 安裝為例弊琴,項目地址:https://github.com/google/googletest/
- 獲取源碼
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz tar -zxvf release-1.8.0.tar.gz
- 編譯安裝
安裝默認會將:cmake . make && make install
-- Installing: /usr/local/lib/libgmock.a -- Installing: /usr/local/lib/libgmock_main.a -- Installing: /usr/local/lib/libgtest.a -- Installing: /usr/local/lib/libgtest_main.a
- 測試:
- 測試代碼
#include <stdio.h> #include <gtest/gtest.h> int add(int a, int b) { return a+b; } TEST(MyTest, AddTest) { EXPECT_EQ(add(1, 2), 3); } int main(int argc, char *argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
- 編譯
g++ -o test test.cpp -lgtest -lgtest_main -lpthread
- 運行輸出
[==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from MyTest [ RUN ] MyTest.AddTest [ OK ] MyTest.AddTest (0 ms) [----------] 1 test from MyTest (0 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (0 ms total) [ PASSED ] 1 test.
- 測試代碼
jenkins 集成
GTest結果可以輸出為xml文件的形式窃款,配合第三方工具可以將其轉(zhuǎn)為html網(wǎng)頁形式再膳∽淼可以配合jenkins使用實現(xiàn)測試報告可視化忘巧。
-
輸出為xml形式
./test --gtest_output=xml:./result.xml
將GTest 輸出的xml結果轉(zhuǎn)為html
https://blog.csdn.net/Neil4/article/details/104484792jenkins安裝插件 publish HTML
基本使用介紹
官方文檔:https://github.com/google/googletest/blob/master/googletest/docs/primer.md
如果局部測試使用了EXPECT系列函數(shù)恒界,它將保證本次局部測試結果不會影響之后的流程。但是ASSERT系列在出錯的情況下砚嘴,當前測試特例中剩下的流程就不走了十酣。
Testsuit 和 Testcase
斷言
-
布爾值類型檢查
Fatal assertion Nonfatal assertion Verifies ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false -
數(shù)值類型檢查
Fatal assertion Nonfatal assertion Verifies ASSERT_EQ(expected, actual); EXPECT_EQ(expected, actual); expected == actual ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1 != val2 ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2 ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2 ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2 ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2 -
字符串類型檢查
Fatal assertion Nonfatal assertion Verifies ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); the two C strings have the same content ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); the two C strings have different content ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); the two C strings have the same content, ignoring case ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); the two C strings have different content, ignoring case 異常檢查
類型檢查
自定義輸出
事件
gtest提供了多種事件機制,非常方便可以在測試前后做些自定義的動作际长。
- 全局的耸采,所有案例執(zhí)行前后。
- TestSuite級別的工育,在某一批案例中第一個案例前虾宇,最后一個案例執(zhí)行后。
- TestCase級別的如绸,每個TestCase前后嘱朽。
-
全局
要實現(xiàn)全局事件,必須寫一個類怔接,繼承testing::Environment類搪泳,實現(xiàn)里面的SetUp和TearDown方法。class FooEnvironment : public testing::Environment { public: virtual void SetUp() { std::cout << "Foo FooEnvironment SetUP" << std::endl; } virtual void TearDown() { std::cout << "Foo FooEnvironment TearDown" << std::endl; } }; TEST(GlobalTest0, test00) { EXPECT_EQ(1, 1); }; TEST(GlobalTest0, test01) { EXPECT_EQ(1, 1); }; TEST(GlobalTest1, test10) { EXPECT_EQ(1, 1); };
int main(int argc, char**argv) { testing::AddGlobalTestEnvironment(new FooEnvironment); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
1.png -
TestSuit
class MyTestSuite0 : public testing::Test { protected: static void SetUpTestSuite() { cout << "TestSuite event0 : start" << endl; } static void TearDownTestSuite() { cout << "TestSuite event0 : end" << endl; } }; TEST_F(MyTestSuite0, test0) { EXPECT_EQ(1, 1); } TEST_F(MyTestSuite0, test1) { EXPECT_EQ(1, 1); } TEST_F(MyTestSuite0, test2) { EXPECT_EQ(1, 1); } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
在編寫測試案例時扼脐,我們需要使用
TEST_F
這個宏岸军,第一個參數(shù)必須是我們上面類的名字,代表一個TestSuite。 -
TestCase
class MyTestCase0 : public testing::Test { protected: virtual void SetUp() { cout << "TestCase event0 : start" << endl; } virtual void TearDown() { cout << "TestCase event0 : end" << endl; } }; TEST_F(MyTestCase0, test0) { EXPECT_EQ(1, 1); } TEST_F(MyTestCase0, test1) { EXPECT_EQ(1, 1); } TEST_F(MyTestCase1, test0) { EXPECT_EQ(1, 1); } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
3.png
參數(shù)化
死亡測試
運行測試
gmock
參考資料
- http://hh-yzm.com/index.php/archives/30/
- https://zhuanlan.zhihu.com/p/34497162
- http://www.ibm.com/developerworks/cn/linux/l-cn-cppunittest/
- http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
- http://www.ibm.com/developerworks/cn/linux/l-cn-cppunittest/>
- http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html