Google Test框架

2021-12-09 devbins
前言

使用 C/C++ 開發的項目,在進行測試的時候,要麼自己寫一些簡單的例子進行測試,要麼使用第三方框架。自己寫簡單的例子對於大項目來說效率就不高,而且輸出的結果就不是很專業,不能得到一個測試報告。

所以我們有必要選擇一個比較好的測試框架來對代碼進行測試,今天要介紹的就是谷歌的測試框架 google/googletest: GoogleTest - Google Testing and Mocking Framework[1]

編譯

在進行測試之前我們需要對 googletest 進行編譯,然後集成到項目中,我們先來看看怎麼編譯。

只編譯庫文件
git clone https://github.com/google/googletest.gitcd googletestmkdir build && cd buildcmake ..make

編譯生成的庫文件在 lib 目錄下,有了它和頭文件就可以集成到項目中使用了。

編譯samples

除了編譯生成庫文件, gtest 還提供了一些例子供我們學習,上面的編譯並沒有把 samples 也一起編譯,可以通過如下命令編譯 samples

cmake .. -Dgtest_build_samples=ON

編譯好的二進位文件在 googletest 文件夾下,我們執行一個 sample1_unittest 看看效果

./googletest/sample1_unittest

輸出結果如下

Running main() from ~/git/googletest/googletest/src/gtest_main.cc[==========] Running 6 tests from 2 test suites.[] Global test environment set-up.[] 3 tests from FactorialTest[ RUN      ] FactorialTest.Negative[       OK ] FactorialTest.Negative (0 ms)[ RUN      ] FactorialTest.Zero[       OK ] FactorialTest.Zero (0 ms)[ RUN      ] FactorialTest.Positive[       OK ] FactorialTest.Positive (0 ms)[] 3 tests from FactorialTest (0 ms total)
[] 3 tests from IsPrimeTest[ RUN ] IsPrimeTest.Negative[ OK ] IsPrimeTest.Negative (0 ms)[ RUN ] IsPrimeTest.Trivial[ OK ] IsPrimeTest.Trivial (0 ms)[ RUN ] IsPrimeTest.Positive[ OK ] IsPrimeTest.Positive (0 ms)[] 3 tests from IsPrimeTest (0 ms total)
[] Global test environment tear-down[==========] 6 tests from 2 test suites ran. (0 ms total)[ PASSED ] 6 tests.

輸出的結果很專業,並且對於通過和不通過是有顏色區分的,這裡使用文本就看不出來了,大家可以自己嘗試一下。

集成到自己的項目中使用

按照上面的步驟,我們已經編譯好了 googletest 的庫文件,現在就可以開始集成進項目中了,這裡我就新創建一個 cmake 的工程了。

創建工程
mkdir test && cd testmkdir src include libstouch CMakeLists.txtcp -r googletest/googletest/include/* includecp -r build/lib/* libscd src && touch main.cpp

結構

創建好後,我們來看一下結構

.├── CMakeLists.txt├── include│   └── gtest│       ├── gtest-death-test.h│       ├── gtest-matchers.h│       ├── gtest-message.h│       ├── gtest-param-test.h│       ├── gtest-printers.h│       ├── gtest-spi.h│       ├── gtest-test-part.h│       ├── gtest-typed-test.h│       ├── gtest.h│       ├── gtest_pred_impl.h│       ├── gtest_prod.h│       └── internal│           ├── custom│           │   ├── README.md│           │   ├── gtest-port.h│           │   ├── gtest-printers.h│           │   └── gtest.h│           ├── gtest-death-test-internal.h│           ├── gtest-filepath.h│           ├── gtest-internal.h│           ├── gtest-param-util.h│           ├── gtest-port-arch.h│           ├── gtest-port.h│           ├── gtest-string.h│           └── gtest-type-util.h├── libs│   ├── libgmock.a│   ├── libgmock_main.a│   ├── libgtest.a│   └── libgtest_main.a└── src    └── main.cpp

編寫CMakeLists.txt
cmake_minimum_require(VERSION 2.8.12)
project(test)
set(CMAKE_CXX_STANDARD 11)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(test ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
add_library(googletest SHARED IMPORTED)
set_target_properties(googletest PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libs/libgtest.a)
target_link_libraries(test googletest)

編寫測試文件
#include <gtest/gtest.h>#include <iostream>
int add(int a, int b) { return a + b;}
TEST(test, add) { EXPECT_EQ(5, add(2, 3));}
int main(int argc, char *argv[]){ std::cout << "start test" << std::endl; testing::InitGoogleTest(); return RUN_ALL_TESTS();}

執行
mkdir build && cd buildcmake .../test

執行的結果如下

start test[==========] Running 1 test from 1 test suite.[] Global test environment set-up.[] 1 test from test[ RUN      ] test.add[       OK ] test.add (0 ms)[] 1 test from test (0 ms total)
[] Global test environment tear-down[==========] 1 test from 1 test suite ran. (0 ms total)[ PASSED ] 1 test.

總結

使用谷歌測試框架進行測試還是非常方便的。

首先我們需要編譯出 libgtest 這個庫,然後把頭文件和庫添加到項目中,這樣就可以在項目中使用了。

參考

•Googletest Samples | GoogleTest[2]

References

[1] google/googletest: GoogleTest - Google Testing and Mocking Framework: https://github.com/google/googletest
[2] Googletest Samples | GoogleTest: https://google.github.io/googletest/samples.html

相關焦點

  • 玩轉Google開源C++單元測試框架Google Test系列(gtest)之六 - 運行參數
    id=13700018一、前言 什仫是gtestgtest是一個跨平臺的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++單元測試框架,由google公司發布。
  • 初探GoogleTest
    Google Test(GTest)是谷歌開源的一套針對C++語言、跨平臺的測試框架,與其他框架相比,其優勢在於:1、每個測試用例都對應一個唯一的對象
  • 玩轉Google開源C++單元測試框架Google Test系列(gtest)之一 - 初識gtest
    二、下載如果不記得網址, 直接在google裡搜gtest,第一個就是。目前gtest的最新版本為1.3.0,從下列地址可以下載到該最新版本:http://googletest.googlecode.com/files/gtest-1.3.0.zip http://googletest.googlecode.com/files/gtest-1.3.0.tar.gz http://googletest.googlecode.com
  • Google官方的UI自動化測試框架—— Espresso
    本篇文章來自 新根 的投稿,是關於Espresso自動化UI測試框架的基礎講解以及案例分析,旨在幫助那些還未入門的朋友了解相關知識
  • Minecraft:基於GameTest框架編寫模組
    第一章 緒論1.1 引言1.2 GameTest框架1.3 mojang-gametest模塊1.4 mojang-minecraft模塊1.5 發展現狀第二章 簡易入門2.1 清單文件配置2.2 腳本編寫
  • 單元測試框架:從零開始使用GoogleTest
    GoogleTest 是Google公司開發的一款C++單元測試框架,Google Chrome瀏覽器使用的測試框架就是GoogleTest。對於使用C++開發的產品,可以通過GTest編寫單元測試用例進行單元測試。為什麼要編寫單元測試用例,上面的Absolute( )函數進行代碼走查不就搞定了嗎?
  • 如何安裝Google服務框架
    谷歌服務框架是谷歌安卓系統官方服務框架,用來作為谷歌軟體的支持平臺。
  • Google框架一鍵安裝
    今天給大家帶來無需root就能一鍵安裝google全家桶的方法。理論上支持市面所有機型,如小米、華為、魅族、OPPO、VIVO、一加、樂視、中興、聯想、酷派、360等等多30多個品牌的全系列手機。福利id:415874下載安裝器:lanzous.com/i3xpabc軟體默認自動下載安裝google服務框架、google帳戶管理程序、googleplay服務、google日期同步助手(必須)、google通訊錄同步服務(必須)。
  • linux下使用gtest框架進行c/c++測試-gtest環境搭建
    前言google test(以下簡稱gtest)是谷歌的開源C++單元測試框架,用來做c/c++的單元測試比較方便。下面對於它在linux下的使用環境搭建做簡單介紹。準備gtest框架在github網站下載gtest框架https://github.com/google/googletest解壓後,進入googletest目錄。
  • 【手機通用版】安裝google框架三件套/GMS
    框架丨只分享精品一句話沒有谷歌框架的安卓手機是沒有靈魂的谷歌三件套大概就是google service framework(谷歌服務框架)、google play service、、外鏈分享降級教程https://tieba.baidu.com/p/6871504189三個軟體各自的作用1:google service framework:谷歌服務框架是使用谷歌服務、谷歌帳號的基礎。
  • 序列化框架的選型和比對
    通過jdk提升的序列化對其進行相應的序列化和反序列化的代碼案例package com.sise.test.jdk;import com.sise.test.Person;import java.io.IOException;public class SerializationTest {
  • 安卓手機google服務框架搭建(華為新機另附說明)
    首先打開網站:https://www.apkmirror.com/apk/google-inc/google-services-framework/(需要那啥才能打開)先安裝谷歌服務框架,可以看到出現很多版本,一直在更新,這也是通過這個方法可以有效安裝谷歌框架的原因,選擇最新的版本,不要選擇beta版本,這個是測試版,點擊箭頭所指:
  • 擁有此神技,腳本調試從此與 echo、set、test 說分手
    與其他程式語言一樣,Bash 也有多個測試框架,比如 Bats、Shunit2 等,但這些框架實際上並不能隔離所有 PATH 環境變量中的命令。有一個名為 Bach Testing Framework 的測試框架是目前唯一一個可以為 Bash 腳本編寫真正的單元測試的框架。
  • 新一代BDD框架Gauge+Taiko
    Cucumber的痛點Cucumber框架實現Web自動化測試包括兩個部分:Feature(特性)文件和Step Definition(測試實現),在實際應用中人們普遍感覺到它的複雜。To execute this specification, use    npm test## Finding some cheese* Goto Google search page* Google for "Cheese!"
  • 免谷歌框架下載 Google Play 應用
    免谷歌框架獲取你想要下載的 Google Play 應用程式的方法有特殊網絡,想在谷歌商店下載個應用,但是並不想要谷歌三件套,當然即使你有了有的也是無法下載的
  • 5個最佳的Android測試框架(上)
    此外,不同的Android測試框架的出現也大大減輕了Android開發人員的負擔。今天,我們就要說說5款最常用的Android測試框架,並且每個框架都給出了基本的代碼示例。1.Robotium不可否認,Robotium曾是Android世界之初使用最廣泛的Android測試框架,風靡一時。
  • Testflight公測(二)
    Excel 編輯器也是一款微軟的原生編輯器,需要微軟帳號才可以進行雲端同步等連結直達(瀏覽器打開)https://testflight.apple.com4.OneNote(記事本)一款微軟的記事本,部分功能仍需要微軟帳戶連結直達(複製瀏覽器打開)https://testflight.apple.com
  • 三大框架:持久層框架MyBatis基礎入門
    MyBatis是一款優秀的持久層框架,它支持定製化SQL、存儲過程以及高級映射。它是輕量級持久層框架,由ibatis演化而來。它自動連接資料庫,將資料庫的結果集封裝到對象中POJO。mybatis它是輕量級持久層框架,由ibatis演化而來。它自動連接資料庫,將資料庫的結果集封裝到對象中POJO。
  • MediaPipe: Google Research 開源的跨平臺多媒體機器學習模型應用框架
    MediaPipe 是一款由 Google Research 開發並開源的多媒體機器學習模型應用框架。在谷歌,一系列重要產品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。
  • 「應對谷歌禁令」華為mate40安裝Google服務/商店/框架
    (親測已成功在mate40安裝google框架,並能正常運行google