【问题标题】:Simplest example of using Google C++ Testing Framework with CMake将 Google C++ 测试框架与 CMake 结合使用的最简单示例
【发布时间】:2011-08-19 12:24:48
【问题描述】:

我有一个非常简单的 C++ 库(一个头文件,一个 .cpp 文件)。我想使用 Google C++ 测试框架为这个项目编写单元测试。

目录结构如下:

~/project1
 |
 |-- project1.cpp
 |-- project1.h
 |-- project1_unittests.cpp
 \-- CMakeLists.txt

我不打算编写自己的 main() 函数。我想与primer 中提到的gtest_main 链接。 CMakeLists.txt 应该包含什么?

【问题讨论】:

    标签: c++ unit-testing cmake googletest


    【解决方案1】:

    启用 CMake 的内置测试子系统:

    # For make-based builds, defines make target named test.
    # For Visual Studio builds, defines Visual Studio project named RUN_TESTS.
    enable_testing()
    

    编译一个可执行单元测试并将其与 gtest 和 gtest_main 链接:

    add_executable(runUnitTests
        project1_unittests.cpp
    )
    target_link_libraries(runUnitTests gtest gtest_main)
    

    添加一个运行这个可执行文件的测试:

    add_test(
        NAME runUnitTests
        COMMAND runUnitTests
    )
    

    【讨论】:

    • 非常感谢。这有很大帮助。我必须同时连接 gtest、gtest_main 和 pthread。我还必须为 libgtest.a 和 libgtest_main.a 指定绝对路径;有没有更好的方法将这些静态库添加到链接器搜索路径?
    • 知道了!我在 bash 中设置并导出了 GTEST_ROOT,然后使用 link_directories($ENV{GTEST_ROOT}) 设置并导出了 include_directories($ENV{GTEST_ROOT}/include)。
    • 就我而言,我选择添加子目录 gtest-1.6.0,因为这对我不起作用(未找到 -lgtest)。我使用了stackoverflow.com/questions/8507723/… 并得到了工作。
    【解决方案2】:

    这是一个最简单的,

    1.创建一个简单的源文件,

    $ cat simplegtest.cpp 
    
    #include<gtest/gtest.h>
    TEST(Mytest, failing_test){
        EXPECT_TRUE(false);
    }
    

    2.使用以下命令编译,

    $ LDLIBS="-lgtest_main -lgtest" make simplegtest
    g++     simplegtest.cpp  -lgtest_main -lgtest -o simplegtest
    

    3.使用以下命令执行测试可执行文件,

    $ ./simplegtest 
    Running main() from /home/prashant/work/thirdparty/googletest-release-1.8.1/googletest/src/gtest_main.cc
    [==========] Running 1 test from 1 test case.
    [----------] Global test environment set-up.
    [----------] 1 test from Mytest
    [ RUN      ] Mytest.failing_test
    simplegtest.cpp:4: Failure
    Value of: false
      Actual: false
    Expected: true
    [  FAILED  ] Mytest.failing_test (0 ms)
    [----------] 1 test from Mytest (0 ms total)
    
    [----------] Global test environment tear-down
    [==========] 1 test from 1 test case ran. (1 ms total)
    [  PASSED  ] 0 tests.
    [  FAILED  ] 1 test, listed below:
    [  FAILED  ] Mytest.failing_test
    
     1 FAILED TEST
    

    【讨论】:

      猜你喜欢
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2014-02-05
      • 2020-11-23
      相关资源
      最近更新 更多