将 gtest 与 cmake/ctest 一起使用时未发现测试



>我有一个具有以下结构的项目:

linalg
├── build
├── CMakeLists.txt
├── docs
│   └── Doxyfile
├── include
│   └── linalg
│       └── vector3.hpp
├── src
│   ├── CMakeLists.txt
│   └── linalg
│       └── vector3.cpp
└── test
    ├── CMakeLists.txt
    └── linalg
        └── test_vector3.cpp

该文件test_vector3.cpp是一个 gtest 单元测试文件,它提供了两个简单的测试。 顶级 CMakeLists.txt 只是设置包含并添加 src 和 test 子目录:

cmake_minimum_required(VERSION 2.8)
project(linalg)
include_directories(include)
add_subdirectory(src)
add_subdirectory(test)

src/CMakeLists.txt 文件将 vector3.cpp 编译成一个静态库:

cmake_minimum_required(VERSION 2.8)
add_library(linalg linalg/vector3.cpp)

test/CMakeLists.txt 文件基于/usr/share/cmake-2.8/Modules/FindGTest.cmake 中提供的示例:

cmake_minimum_required(VERSION 2.8)
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(test_vector3 linalg/test_vector3.cpp)
target_link_libraries(test_vector3 linalg ${GTEST_BOTH_LIBRARIES} pthread)
add_test(test_vector3 test_vector3)

然后,我运行以下命令:

cd build
cmake ..
make

我得到了liblinalg.a库正确编译到build/src中,我得到了正确编译test_vector3可执行文件来构建/测试。 我可以运行test_vector3可执行文件,并从googletest获得输出,说所有测试都已通过,但是如果我运行make test则不会得到任何输出,如果我运行ctest ..则会收到一条消息:

Test project /home/ryan/GitHub/linalg/build
No tests were found!!!

我错过了什么吗?还是我只是误解了 ctest 如何与 gtest 一起工作?

问题的症结在于.txt在这种情况下,应该从顶级 CMakeList 调用enable_testing。 将include(CTest)添加到顶级 CMakeList .txt应该会为您解决此问题。

这将允许您删除 test/CMakeLists.txt 中的enable_testing调用,因为 CTest 子模块调用enable_testing内部的。

只是为了更新这个。

cmake 在 3.9 版本中增加了对 GoogleTest 与 CTest 集成的支持。

因此,您现在可以让 CTest 抓取测试可执行文件中的所有测试宏,而不仅仅是整个可执行文件。

这里的例子:https://gist.github.com/johnb003/65982fdc7a1274fdb023b0c68664ebe4

相关内容

  • 没有找到相关文章

最新更新