2016-03-18 30 views
0

我想出了谷歌測試平臺。我希望這個Gtest平臺能夠幫助我目前的項目。無法使用gmock/gmock.h生成C/C++程序,生成的錯誤太多

所以,我沒有看到來自Gtest團隊的任何教程,以指導如何創建新項目並編譯項目,同時包括庫「gmock/gmork」和「gtest/gtest.h」。

我從網上下載回購的GTEST項目:谷歌/ googletest

做一些措施,能夠使用GTEST框架:

  1. Intall GTEST平臺:

    $ sudo易於得到安裝libgtest-dev #gtest

    $ sudo apt-get install google-mock #gmock

  2. 然後,安裝CMake:

    $ sudo易於得到安裝CMake

  3. ,並建立2個項目(GTEST和gmock)

    $ CD/usr/src目錄/ GTEST

    $須藤的cmake的CMakeLists.txt

    $ CD/usr/src目錄/ gmock

    $ sudo的cmake的的CMakeLists.txt

    $ sudo的使

  4. 最後,複製所有* .a文件到/ usr/lib目錄

    $ CP * .A/usr/lib目錄

包括:libgtest。 a,libgtest_main.a,libgmock.a,libgmock_main.a

我在Ubuntu 14.04 LTS中通過Eclipse C創建了一個新項目。 當我包括gtest.h到我的項目,該項目已成功建成並運作良好

g++ -o "myGtest" ./myGtest.o ./src_code.o -lgtest -lpthread 

但是,如果包括更多gmock.h,該方案未能建立。編譯器genereted錯誤太多

g++ -o "myGtest" ./myGtest.o ./src_code.o -lgtest -lgmock -lpthread 

Hình ảnh nội tuyến

請幫我解決這個問題。

順便說一句,我有一個問題:

假設我有一個簡單的模塊C src_code。C,例如:

Hình ảnh nội tuyến

我測試功能,在功能調用的測試,我想重新路由程序無法執行此測試,它會跳到我的自定義的測試 例如,在myGtest.cpp中,我寫道:

int test(int a) { 
    printf("overridden successful !\n"); 
    return a; 
} 

此技術是模擬或存根或虛擬函數。

請給我詳細信息如何通過Gtest框架來模擬被測模塊中的內部函數?請給我一個例子。

我曾嘗試在此站點上一篇文章中找到解決方案。

但是,我沒有弄清楚我的答案。

回答

1

Gmock配置[Eclipse的三月 - Ubuntu的14.04 LTS]從谷歌的github

GIT中克隆https://github.com/google/googletest.git GoogleTest/

  • 安裝CMake

    1. 克隆主資源:

      命令和apt - 安裝cmake

    2. 構建主GTEST項目由CMake的:

      CD GoogleTest/googlemock

      須藤cmake的CMakeLists。TXT

      須藤使

    ,我們將更多的日誌信息:

    Scanning dependencies of target gmock 
        [ 14%] Building CXX object CMakeFiles/gmock.dir/home/thaohm2/FPT/Softs/GoogleTest/googletest/src/gtest-all.cc.o 
        [ 28%] Building CXX object CMakeFiles/gmock.dir/src/gmock-all.cc.o 
        Linking CXX static library libgmock.a 
        [ 28%] Built target gmock 
        Scanning dependencies of target gmock_main 
        [ 42%] Building CXX object CMakeFiles/gmock_main.dir/home/thaohm2/FPT/Softs/GoogleTest/googletest/src/gtest-all.cc.o 
        [ 57%] Building CXX object CMakeFiles/gmock_main.dir/src/gmock-all.cc.o 
        [ 71%] Building CXX object CMakeFiles/gmock_main.dir/src/gmock_main.cc.o 
        Linking CXX static library libgmock_main.a 
        [ 71%] Built target gmock_main 
        Scanning dependencies of target gtest 
        [ 85%] Building CXX object gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o 
        Linking CXX static library libgtest.a 
        [ 85%] Built target gtest 
        Scanning dependencies of target gtest_main 
        [100%] Building CXX object gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o 
        Linking CXX static library libgtest_main.a 
        [100%] Built target gtest_main 
    Four static libraries are generate: 
    libgmock.a libgmock_main.a libgtest.a libgtest_main.a 
    
  • 我們需要複製所有的* .a文件到/ usr/LIB:

    須藤CP * .A/usr/lib目錄

    須藤CP GTEST/* A/usr/lib目錄

  • 並且拷貝gmock的必要庫和GTEST到/ usr /包括

    sudo cp -r include/gmock /usr/include/ 
    
    sudo cp -r ../googletest/include/gtest/ /usr/include/ 
    
  • 創建一個新的C++項目,並添加 「gmock」 和 「並行線程」選項鍊接庫 右鍵單擊項目 - >屬性 - > C/C++ Builder中 - >設置 - >工具設置 - > GCC C++鏈接器 - >庫 添加... gmock 並行線程
  • 請注意,gmock必須按順序排列爲pthread。

  • 包括gmock和GTEST到您的項目並進行編譯項目:

    包括

    包括

    // ...

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

  • 輸出:

    [==========] Running 0 tests from 0 test cases. 
    [==========] 0 tests from 0 test cases ran. (0 ms total) 
    [ PASSED ] 0 tests. 
    

    完成。

    +0

    #include #include // ...顯示錯誤 –

    0

    請參閱本文就如何建立與Eclipse谷歌測試:

    http://www.codeproject.com/Articles/811934/Cplusplus-unit-test-start-guide-how-to-set-up-Goog

    至於你的第二個問題: 谷歌模擬是嘲諷接口。您可以設置預期並定義接口功能的操作。所以你的'測試'功能必須成爲界面的一部分,才能嘲笑它。

    請與本教程開始:

    https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md

    +0

    感謝您的回答。但它仍然不是我需要的答案。 我想問: 假設我有一個INT __wrap_test(INT),我想,當測試()被調用時,__wrap_test(INT)將被調用,而不是測試() 我用: EXPECT_CALL(mock_test ,test(0)) \t \t \t .WillOnce(Invoke(this,&BTest :: __ wrap_test)); 但似乎不可能完成。你有什麼主意嗎 ? –