首页 文章

使用Google Test和CMake在子文件夹中配置测试

提问于
浏览
1

这应该是一个相当简单的问题,但考虑到使用cmake构建项目的黑色艺术,它将帮助相当多的人努力解决这个问题 .

我试图让我的代码库更有条理 . 为此,我正在根据其域创建包含测试套件的子文件夹 .

Google测试本身已经在编译和运行,唯一的问题是,通过这次重组,Google Test无法找到我所拥有的任何测试用例 .

这是我的结构:

tests\
     |
     \domain1\
             |CMakeLists.txt
             |domain1_test.cpp
             |domain1_test.hpp
             |[.. more tests ...]
     \domain2\
             |CMakeLists.txt
             |domain2_test.cpp
             |domain2_test.hpp
             |[.. more tests ...]
     |main.cpp
     |CMakeLists.txt

如您所见,我有两个测试生活的文件夹 .

其中的 CMakeLists.txt 文件如下:

SET(DOMAIN1_TEST_SRC
        domain1_test.cpp
        domain1_test.hpp)

ADD_LIBRARY(domain1testlib STATIC ${DOMAIN1_TEST_SRC})

TARGET_LINK_LIBRARIES(domain1testlib
        ${Boost_LIBRARIES}
        domain_lib
        gtest
        )

TARGET_INCLUDE_DIRECTORIES(domain1testlib
        INTERFACE
        ${CMAKE_CURRENT_SOURCE_DIR})

主测试目录中的 CMakeLists.txt 是:

add_subdirectory(domain1)
add_subdirectory(domain2)

ADD_EXECUTABLE(my_domain_tests main.cpp)

TARGET_LINK_LIBRARIES(my_domain_tests
        ${Boost_LIBRARIES}
        domain1testlib
        domain2testlib
        comptestlib
        gtest
        )

add_test(MyTestSuite my_domain_tests)

我究竟做错了什么?

运行测试只是说没有找到测试 .

谢谢!

UPDATE 添加我的main.cpp

它真的没什么特别的,只是样板main.cpp文件 .

#include "gtest/gtest.h"

int main(int argc, char ** argv) {

    ::testing::InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}

2 回答

  • -1

    问题是 domain*testlib 中没有符号来自您的可执行文件源,即 main.cpp .

    Google Test中的 TESTTEST_F 宏会自动向测试运行器注册测试用例 . 因此,您的测试源文件实际上包含对gtest库中符号的引用,而不是相反 . 因此,链接器将不包含任何实际测试用例 .

    您应该将 domain*_test.cppdomain*_test.hpp 文件包含在可执行文件源中,而不是使用它们创建库 . 您可以直接引用文件或使用每个 CMakeLists.txt 中定义的变量和源列表来执行此操作 .

  • 1

    我做错了什么?运行测试只是说没有找到测试 .

    提供“make test”并在你需要的构建目录中工作ctest

    ENABLE_TESTING()# Force "make test" to works
    

    在CMakeLists.txt中的add_test之前

相关问题