本文將介紹單元測試工具google test(gtest)在linux作業系統中測試環境的搭建方法。本文屬於google test使用的基礎教程。在linux中使用google test之前,需要對如下知識有一些了解:
c/c++程式設計方法
makefile的編寫
linux命令列操作
gtest背景知識:它是用來幹什麼的?它用什麼語言編寫的?它的一些基本語法?等等
以上知識不需要做到熟能生巧,只要達到入門級別,使用gtest不會費任何力氣,畢竟gtest也不是乙個高門檻的工具。言歸正傳,我們來按照步驟逐一講解:
目前gtest的最新版本為gtest-1.7.0.zip,因此我們在本文中將以這個版本作為例子講解。
2:認識資料夾
這麼多檔案乍一看確實有點讓人摸不到頭腦。其實,gtest提供了對於多個不同平台的支援,例如msvc資料夾是用在微軟visual studio中,xcode資料夾是用於mac xcode,codegrear資料夾是用於borland c++ builder,在linux環境中,我們用的內容就是make資料夾了。
3:清除不需要的檔案
前一步中我們已經講到,很多檔案是為了支援不同平台的,為了保持程式的簡潔,避免混淆試聽,我們在這一步把所有不需要的檔案全部刪除,只保留我們需要的。其實我們只需要4個資料夾,如下圖所示。
其餘的檔案以及資料夾全部刪除(這一步並不是必須,但對於我們有潔癖的程式設計師來講,容不得一堆不用的**放在那~)。
好了,只剩下了四個資料夾,看上去是不是清爽了很多?其實開啟make資料夾,你會發現裡面只有乙個makefile檔案。檢視makefile檔案內容,得知這是系統給出的編譯samples資料夾中的第乙個sample的命令。但是開啟sample資料夾,又看到裡面一大坨原始檔。在本入門教程中,我們先不考慮那些複雜的例子。因此,開啟samples資料夾,開始刪檔案,刪到只剩下如圖所示的三個檔案為止。
我們的程式越來越清爽了^_^。
4:改寫makefile檔案
此時如果你到make資料夾下,通過命令列執行 $ make && ./sample1_unittest 命令,可以看到測試的執行結果。不過如果開啟makefile檢視一下,就會發現這個makefile只適用於編譯sample1,如果我再增加乙個被測的原始檔呢?又要重新寫makefile,太麻煩了。於是,在這一步,我們改寫一下makefile。上一步我們講到,現在只剩下4個資料夾(include,make,samples,src),既然make裡面的唯一乙個檔案也要被改寫,那也沒必要留這個資料夾了。於是,在step 4,你要做的第一件事情就是,把make資料夾,連同裡面的makefile檔案全部刪除……然後,進入samples資料夾,自己建立乙個檔案,名為makefile,如圖所示:
然後,開啟makefile檔案,寫入以下內容,如圖所示(不要把圖中的行號也寫進去哦~)。這個新的makefile是由剛才被我們刪除的makefile改寫而來的,如果你好奇的話可以比較一下它們之間的差別,裡面涉及到一些makefile的語法和函式,如果不熟的話,你可能需要花費幾分鐘查一下資料去了解他們。
注意下圖中改寫的makefile第32行,我們編譯的是字尾名為cpp的檔案,而原來給的例子卻以cc結尾。因此,你還要做一件事情,就是把sample1.cc的檔名改為sample1.cpp,把sample1_unittest.cc的檔名改為sample1_unittest.cpp,就大功告成了。
現在我們的資料夾有三個(include,src,samples),我們自己被測的程式放在sample資料夾中。這個資料夾的名字看著也比較不爽,你可以把它改為mycode或者testcode,然後gtest根目錄的資料夾名稱gtest-1.7.0也可以改為mygtest之類,用以滿足我們完美主義者的需求。如圖所示:
現在,進入命令列進行編譯執行操作: $ make && ./run_test,就可以看到結果了,如圖所示:
5:新增自己的測試函式
這個被測檔案的作用是計算任意乙個正整數的平方根,演算法複雜度在log(n)級別。將以上三個檔案放在mycode資料夾中,然後 make && ./run_test進行編譯執行,就可以看到結果了:
總結:環境搭建完成之後,每次測試乙個檔案***.cpp以及它的***.**件,就把這倆放入mycode資料夾,然後編寫***_unittest.cpp測試檔案,也放進去。然後到這個目錄下用命令列 make && ./run_test就可以了,應該比最開使的時候方便了許多吧?要測試時,我們只需要三個檔案放入mycode,然後命令列進入這個目錄 make && ./run_test 即可完成測試。下面的圖就是我現在的mycode資料夾了。***_unittest.cpp這個檔名並不是固定,取成別的也無所謂,只是這樣更容易辨認哪乙個檔案是在測哪個函式而已。
當然,google test是乙個非常強大的工具,以上所講解的只是使用了它最最基本的功能,以及乙個簡單環境的搭建。其實需要用的檔案就是step 4中提到的那剩下的三個資料夾內容,進行適當的改寫,就可以實現更加強大的功能。這些等到以後有機會再寫啦。
自動駕駛汽車與自動駕駛網路
談到自動駕駛網路很容易讓人聯想到自動駕駛汽車,恰好讀到google的工程師用自動駕駛汽車和自動駕駛網路做的乙個模擬,感覺很有道理的樣子,記錄並分享一下 開發一輛自動駕駛汽車所需要的 1 一輛比較現代的車 2 各式各樣的感測器 效能強大的計算機 ai軟體。3 大量的訓練和測試。類似地,開發自動駕駛網路...
自動駕駛相關
計畫 2021年1月10號前,查資料,了解相關資訊 學習目標 1 路徑規劃,有地圖的基礎上,起點到終點的路徑規劃 2 路徑規劃的技術上,避障等如何實現 自動駕駛工程師,谷歌認證機器學習專家,蘭州大學無人駕駛團隊創始人,主攻深度學習,無人駕駛汽車方向。學習資料記錄 優達學城 學習筆記 20200102...
自動駕駛相關
在實際上行駛中,自動駕駛車輛除了直行,還需要根據需求右轉 左轉或者是倒車,倒車的可能性很小,幾乎沒有自動駕駛公司去做這個場景,左轉相比右轉會更難。尤其是在沒有交通訊號燈,或者是停車標識來引導的左轉,這稱之為無保護左轉,即便是對人類司機而言,都是相當困難的,自動駕駛車輛遇到同樣的難題。waymo的行為...