Gtest discovery_tests 在 Github Actions 中失败:进程因超时而终止

Raj*_*ury 3 macos cmake googletest ctest github-actions

我将 google-test(gtest) 与 CMake 结合使用,并将单元测试作为适用于 Linux 和 Mac 的 GitHub ci 作业运行。Linux 作业成功通过。但是,我在 mac runner 上遇到错误。错误是

CMake Error at /usr/local/Cellar/cmake/3.21.1/share/cmake/Modules/GoogleTestAddTests.cmake:77 (message):
  Error running test executable.

    Path: '/Users/runner/work/splitwebp/build/test/splitwebp_tests'
    Result: Process terminated due to timeout
    Output:
      

Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.21.1/share/cmake/Modules/GoogleTestAddTests.cmake:173 (gtest_discover_tests_impl)
Run Code Online (Sandbox Code Playgroud)

这是CMakelists.txt测试目录

# CMake config file for unit tests
# Requiring V 3.10 for gtest_discover_tests
cmake_minimum_required(VERSION 3.10)
find_package(OpenCV REQUIRED)
enable_testing()

# finds all .cpp files under this directory (./test) and add them to executable
file(GLOB_RECURSE tests "*.cpp")
file(GLOB_RECURSE source "../src/*.cpp")
add_executable(splitwebp_tests ${tests} ${source})

include_directories("../3rdparty/libwebp/include")

# Link gtest libraries
target_link_libraries(splitwebp_tests ${OpenCV_LIBS})
target_link_libraries(splitwebp_tests webp webpdemux pthread)
target_link_libraries(splitwebp_tests gtest_main)

set(CTEST_OUTPUT_ON_FAILURE 1)

# Find all tests in all .cpp files and convert to CTests
include(GoogleTest)

gtest_discover_tests(splitwebp_tests)
Run Code Online (Sandbox Code Playgroud)

如何修复 CI 管道?

Raj*_*ury 7

问题是gtest_discover_tests(...)花费的时间太长,因此超时。显而易见的解决方案是增加超时限制。

线路

gtest_discover_tests(splitwebp_tests)
Run Code Online (Sandbox Code Playgroud)

可以替换为

gtest_discover_tests(splitwebp_tests PROPERTIES TIMEOUT 600)
Run Code Online (Sandbox Code Playgroud)

  • 注意:从 CMAKE 3.10.3 开始,这称为“DISCOVERY_TIMEOUT”(请参阅​​:https://cmake.org/cmake/help/git-stage/module/GoogleTest.html#command:gtest_discover_tests)。可以设置为 `gtest_discover_tests(splitwebp_tests DISCOVERY_TIMEOUT 30)` (2认同)