2010-10-17 48 views
30

我已經下載谷歌測試,但現在我不知道如何將它鏈接到我的項目在日食。 我應該將它作爲源文件夾添加嗎?應該將它包含爲g ++包含的庫嗎?那我該如何運行測試呢?在eclipse中使用googletest:怎麼樣?

+0

最初,谷歌推薦使用庫鏈接,但後來他們改變了他們的建議,他們有很多的不好的經驗後。該庫是使用某些編譯器選項構建的。如果測試用例和軟件沒有使用相同的選項構建,那麼事情可能會出錯 - 無論是災難性的還是微妙的。 因此,現在他們建議將Gtest源代碼包含到每個測試用例中,並將其構建爲一體,而不是將Gtest作爲鏈接庫。請參閱https://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog – Mawg 2015-08-18 10:04:49

回答

38

使用Riga's excellent answer,這裏是我得到了它的總結工作:

  1. 創建在Eclipse
  2. 下載googletest 1.5.0,未解壓的一個新的C++項目(我選擇的可執行文件>的空項目),跑./scripts/fuse_gtest_files.py . <project-dir>/contrib
  3. 早在Eclipse中,排除發佈版本的配置contrib目錄,並添加<project-dir>/contrib到包括目錄(奇怪,我知道)
  4. 增加了src目錄,並在Eclipse中添加了一個名爲Foo類(請參閱下面的Foo.h --I內容左Foo.cpp空現在)
  5. 增加了test目錄,從發佈版本配置排除它,添加<project-dir>/contrib到包括目錄,並添加了新的源文件FooTest.cppAllTests.cpp(請參閱下面的內容)
  6. 構建並運行該項目!

foo.h中:

#ifndef FOO_H_ 
#define FOO_H_ 
class Foo { 
public: 
    virtual ~Foo(); 
    Foo(); 
    bool foo(void) { return true; } 
}; 
#endif /* FOO_H_ */ 

FooTest.cpp:

#include "gtest/gtest.h" 
#include "Foo.h" 
namespace { 
    class FooTest : public ::testing::Test { 
    protected: 
    Foo foo; 
    }; 
    TEST_F(FooTest, Foo) { 
    ASSERT_TRUE(foo.foo()); 
    } 
} 

AllTests.cpp:

#include "gtest/gtest.h" 
#include "FooTest.cpp" 
int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

下面是詳細的步驟:

  1. 在Eclipse中,打開文件菜單,然後選擇>C++項目
  2. 項目類型:可執行>空項目
  3. 工具鏈:Linux的GCC
  4. 點擊完成
  5. 開一個終端和cd /tmp
  6. wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
  7. cd gtest-1.5.0/
  8. ./scripts/fuse_gtest_files.py . <project-dir>/contrib
  9. 早在Eclipse中,在項目資源管理器窗格中的項目文件夾,單擊鼠標右鍵,然後選擇刷新
  10. 在Project Explorer窗格中,右鍵點擊在contrib文件夾中,選擇排除構建...*勾去掉只有**釋放複選框,然後單擊OK
  11. 右鍵單擊contrib文件夾並選擇屬性>C/C++編譯>設置>工具設置標籤>GCC C++編譯器>目錄
  12. 點擊添加...按鈕,然後工作區...按鈕,然後SE LECT <project-name>/contrib並單擊OK添加目錄
  13. 點擊OK一次接受你更改構建設置
  14. 在Project Explorer窗格中右鍵單擊並選擇>文件夾,進入src正如它的名字,然後點擊OK
  15. 在Project Explorer窗格src文件夾中單擊鼠標右鍵,選擇新建>,將其命名爲Foo,然後單擊OK (見上爲Foo.h內容; Foo.cpp可以保留原樣)在項目資源管理器窗格中的項目
  16. 右鍵單擊並選擇>文件夾,進入test正如其名,然後單擊OK
  17. 按照上面的步驟添加<project-name>/contrib<project-name>/src爲包括目錄到test目錄
  18. 右鍵單擊test文件夾,然後選擇>源文件AllTests.cpptest文件夾,然後重複同樣的步驟添加FooTest.cpp(參見上面的內容)上FooTest.cpp
  19. 右鍵單擊並選擇從構建...排除,點擊全選按鈕,然後OK在項目資源管理器窗格中的項目
  20. 單擊鼠標右鍵,然後選擇屬性>C/C++編譯>設置>工具設置標籤>GCC C++鏈接器>,然後單擊添加...按鈕,進入並行線程(由googletest需要),單擊OK添加庫,然後OK再次接受更改
  21. 命中按Ctrl-B建設項目
  22. 命中Ctrl-F11運行該項目
  23. 勝利!
+1

我的主要src文件夾中有另一個文件(不是test/src),它有一個主要功能,並且項目不會生成,因爲AllTests還包含一個主要功能。我在這裏做錯了什麼? – Aly 2012-10-12 12:48:21

+0

我不能在步驟.10中看到「從構建中排除」。你可以幫我嗎? – eeadev 2013-09-04 10:31:44

+0

我對自己做出了迴應:對於我的開普勒日食,你應該按照下面的步驟進行操作:右鍵點擊屬性 - > c/C++ build-> settings-> exclude ... – eeadev 2013-09-04 11:01:19

9

你不應該將它添加到你的源文件夾中,單獨的文件夾來代替。這是爲了避免測試項目對生產代碼的依賴。像這樣做

../ #your project folder 
Makefile 
src/ 
    module1 #some module 
    module2 #another module 
build #tmp for build 
dist #binaries 
contrib/ 
    gtest 
    ... 
test/ #your test project folder 
    Makefile 
    src/ 
    module1 #correspondent to main project's one 
    module2 #correspondent to main project's one 
    build 
    dist 
    ... 

我通常使用谷歌測試作爲兩個文件,這是非常方便。使用gtest distribution中的scripts/fuse_gtest_files.py來提取它們。只有兩個文件,你可以將它們的編譯包含在你的測試項目編譯中,並且具有簡單的項目結構。

在您的測試projectspecify包括目錄../contrib:../src:src。 因此,你可以包括報頭這樣

測試/ src目錄/模塊1/class1Test.h:

#include "gtest/gtest.h" 
#include "module1/class1.h" 

// test class1 here 
// ... 

測試/ src目錄/ mainTest.cpp:

#include "gtest/gtest.h" 
#include "module1/class1Test.h" 
#include "module2/class2Test.h" 
// include other tests you have 
// ... 

int main(int argc, char** argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 
6

這裏是我的Eclipse解決方案4.3和CDT 8.2 我覺得這樣比上面描述的要容易一些。

  1. 下載GTEST並安裝其作爲README.TXT描述(使用cmake和在linux使)

  2. 轉到「YourProject->屬性 - > C/C++建設 - >設置 - > GCC C++反編譯>包括 - >包含路徑」並添加包括文件夾中GTEST

  3. 轉到 「YourProject->屬性 - > C/C++建設 - >設置 - > GCC C++鏈接器>庫」,加在GTEST文件夾搜索路徑並添加庫「GTEST」和「並行線程」

(4。如果在同一個項目測試,源排除發行版本測試)

  1. 進入「運行 - >運行配置...」並創建一個新的C/C++單元運行配置

  2. 在主選項卡中將項目設置爲您的項目並將C/C++應用程序設置爲您的應用程序。在C/C++測試選項卡中將測試運行器設置爲Google測試運行器。

(7。錯誤通知可以堅持圍繞在使用Eclipse GUI,如果是這樣的情況下,重新建立索引的項目可能會幫助)

22

第1步安裝Eclipse

如果Eclipse沒有在機器上安裝,然後得到從Eclipse下載頁面(http://www.eclipse.org/downloads/)獲取適用於C/C++開發人員的最新Eclipse IDE版本。

如果Eclipse已經安裝,但僅適用於Java,請按照這些說明下載C++插件。

a。打開Eclipse,然後單擊幫助 - >安裝新軟件

enter image description here

灣在處理中:輸入http://download.eclipse.org/tools/cdt/releases/kepler。片刻後,名稱框將填充。選擇以下組件:

  • CDT主要特點 - > C/C++開發工具
  • CDT主要特點 - > C/C++開發工具SDK
  • CDT可選功能 - > C/C++單元測試支持
  • CDT可選功能 - > C/C++單元測試支持來源
  • CDT可選功能 - > C/C++的Visual C++支持

enter image description here

c。單擊下一步,同意這些語句,然後單擊完成。

第2步下載的Cygwin

通過點擊Cygwin的設置,x86_64.exe鏈接安裝頁面(http://www.cygwin.com/install.html)安裝Cygwin。運行後,通過默認值單擊下一步,直到進入「選擇軟件包」窗口。

enter image description here

您需要搜索並安裝兩個包:gcc和make。

第一個搜索項是gcc。搜索gcc,然後打開Devel文件夾。點擊跳過的單詞(它會更改爲內部版本號,可能高於此處描述的內部版本號),標記以下軟件包以進行安裝:gcc-core,gcc-g ++和libgcc1。

enter image description here

的第二查詢詞是做。在這裏,我們只需要Devel包裝。

enter image description here

一旦這些被選中,單擊下一步安裝。

步驟3下載並建立谷歌測試項目

下載從https://code.google.com/p/googletest/downloads/list GoogleTest的最新版本,以及zip文件內容提取到一個公共目錄。所有用戶都能夠訪問此目錄很重要。

要構建谷歌測試項目:

  1. 打開的Cygwin(找到Cygwin的安裝目錄,然後在Cygwin.bat雙擊)。
  2. 改變當前的工作目錄解壓的GoogleTest創建目錄:cd c:/<<yourpath>>/gtest-1.7.0/make/
  3. 生成項目:make
  4. 創建歸檔庫出GTEST-all.o中的文件:ar -rv libgtest.a gtest-all.o

步驟4 Cygwin的bin目錄添加到計算機PATH變量

按照此頁面上的說明,您的Windows版本:http://www.java.com/en/download/help/path.xml,將Cygwins bin目錄添加到計算機PATH環境變量中。 (通常通過將C:\ cygwin64 \ bin添加到當前值的末尾)。

第5步創建使用GoogleTest

啓動Eclipse並選擇File-一個新的項目 - >新建> C++項目。輸入下面的值並單擊完成。

enter image description here

在項目資源管理器,用鼠標右鍵單擊該項目的名稱,然後選擇屬性。在C/C++ Build下,將Builder類型更改爲Internal Builder。

enter image description here

在C/C++生成,選擇設置,然後在含下Cygwin的C++編譯器的文件夾。點擊頂部框中的添加按鈕,然後瀏覽至GoogleTest包含文件夾。

enter image description here

最後,在Cygwin C++鏈接器文件夾下,選擇雜項,然後單擊下的其他對象添加圖標。找到您在步驟3中創建的libgtest.a文件(它應該位於解壓縮的gtest文件夾的make目錄中)。

enter image description here

完蛋了!現在你準備好嘗試一下了。

步驟6編寫使用GoogleTest

  • 通過點擊文件 - >新建 - >源文件夾添加一個源文件夾一些代碼。稱它爲 src。
  • 右鍵單擊src文件夾並選擇New-> Header File來添加一個頭文件。調用這個文件Counter.h。
  • 右鍵單擊src文件夾並選擇New-> Source File來添加源文件。呼叫 這個文件Counter.cpp。
  • 添加另一個源文件並將其稱爲Counter_Tests.cpp。

複製並粘貼下面的代碼到相應的文件:

Counter.h

class Counter { 
private: 
     int mCounter; 
public:  
     Counter() : mCounter(0) {} 
     int Increment();  
}; 

Counter.cpp

#include <stdio.h> 
#include "Counter.h" 

int Counter::Increment() {  
     return mCounter++; 
} 

Counter_Tests.cpp

#include "gtest/gtest.h" 
#include "Counter.h" 

TEST(Counter, Increment) { 
     Counter c;  
     EXPECT_EQ(0, c.Increment()); 
     EXPECT_EQ(1, c.Increment()); 
     EXPECT_EQ(2, c.Increment()); 
} 

int main(int argc, char **argv) {  
     ::testing::InitGoogleTest(&argc, argv); 
     return RUN_ALL_TESTS(); 
} 

在Project菜單中選擇Build All。現在,要連接GoogleTest單元測試框架,請從Run菜單中選擇Run Configurations。在這個對話框中,選擇C/C++ Unit並點擊New按鈕。

enter image description here

應該填寫在C/C++應用程序自動將此項目的名稱,如果沒有就搜索項目單擊以選中此項目。接下來,點擊C/C++測試選項卡。在Tests Runner下拉菜單中,選擇Google Tests Runner,然後點擊Run觀看魔術!

enter image description here

下面是結果的快照。在編寫更多代碼/測試之後,您可以單擊紅色突出顯示的按鈕快速重新編譯並重新運行所有測試。

enter image description here

+1

非常感謝你爲這個徹底的教程。只有一件事,我的谷歌測試框架**沒有**生成** libgtest.a **,所以我不得不滑雪;步驟3.4和5的最後一步。但最後,一切都像一個魅力。再次感謝你。 – narengi 2015-06-13 01:26:26

+0

非常感謝,這應該是被接受的答案。 – Alex 2016-11-10 00:28:25

0

我有托盤的解決方案,它運行良好。我可以說對於編譯gtest在README中不是很清楚。文本。

我已經通過cygwin控制檯在/ make目錄中運行makefile。 在我的情況下,編譯器建議我不要找到pthread庫。所以我修改了行

CXXFLAGS += -g -Wall -Wextra -pthread

,並把它改成

CXXFLAGS += -g -Wall -Wextra -lpthread

我得到的輸出爲gtest_main.a。然後我將這個文件重命名爲libgtest.a並將其複製到C:\cygwin\lib directory

然後,我已經配置我的eclipse項目使用cygwin,並添加gtest和pthread,因爲你說...它的工作原理!

我希望它可以幫助別人