From f6780f0038333a570e1b4d5f3550d19a32994c2f Mon Sep 17 00:00:00 2001 From: xiepengfei Date: Fri, 18 Sep 2026 15:56:16 +0800 Subject: [PATCH] fix: skip unit tests in Release build for packaging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Root cause: BUILD_TESTS option defaulted ON regardless of CMAKE_BUILD_TYPE, Release packaging builds compiled and ran unit tests via gtest_discover_tests which timed out on aarch64 under high parallelism (make -j96) due to Qt6 WebEngine shared library loading exceeding the 5s default DISCOVERY_TIMEOUT 2. Fix: guard BUILD_TESTS with CMAKE_BUILD_TYPE check to skip tests in Release mode; add DISCOVERY_TIMEOUT 30 to all gtest_discover_tests calls as Debug-mode defensive measure 3. Impact: Release packaging builds no longer compile or run unit tests, eliminating the timeout; Debug builds retain full test coverage with extended discovery timeout Influence: 1. Verify Release mode packaging build completes without timeout 2. Verify Debug mode unit tests still run with DISCOVERY_TIMEOUT 30 3. Confirm no test targets are missing DISCOVERY_TIMEOUT parameter fix: Release模式下跳过单元测试修复打包失败 1. 根因:BUILD_TESTS 选项默认 ON 且不检查 CMAKE_BUILD_TYPE, Release 打包构建编译并运行单元测试,gtest_discover_tests 在 aarch64 高并行(make -j96)下因 Qt6 WebEngine 共享库 加载超过 5 秒默认 DISCOVERY_TIMEOUT 而超时 2. 方案:BUILD_TESTS 增加 CMAKE_BUILD_TYPE 检查,Release 模式 跳过测试;所有 gtest_discover_tests 调用添加 DISCOVERY_TIMEOUT 30 作为 Debug 模式防御性措施 3. 影响:Release 打包构建不再编译运行单元测试,消除超时; Debug 构建保留完整测试覆盖并延长发现超时时间 Influence: 1. 验证 Release 模式打包构建无超时完成 2. 验证 Debug 模式单元测试在 DISCOVERY_TIMEOUT 30 下正常运行 3. 确认所有测试目标均已添加 DISCOVERY_TIMEOUT 参数 PMS: BUG-20260918 --- CMakeLists.txt | 2 +- tests/app_ut/CMakeLists.txt | 2 +- tests/common/CMakeLists.txt | 2 +- tests/common2/CMakeLists.txt | 2 +- tests/controls_ut/CMakeLists.txt | 2 +- tests/daemon_ut/CMakeLists.txt | 2 +- tests/editor_areas/CMakeLists.txt | 2 +- tests/editor_core/CMakeLists.txt | 2 +- tests/editor_markdown/CMakeLists.txt | 2 +- tests/editor_undo/CMakeLists.txt | 2 +- tests/editor_wrapper/CMakeLists.txt | 2 +- tests/startmanager/CMakeLists.txt | 6 +++--- tests/thememodule/CMakeLists.txt | 2 +- tests/widgets_ut/CMakeLists.txt | 2 +- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 363180d8..ed9d576b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,6 @@ add_definitions(-DKF5_HIGHLIGHT_PATH=\"${KF5_HIGHLIGHT_INSTALL_PATH}\") add_subdirectory(src) option(BUILD_TESTS "Build unit tests" ON) -if(BUILD_TESTS) +if(BUILD_TESTS AND NOT CMAKE_BUILD_TYPE STREQUAL "Release") add_subdirectory(tests) endif() diff --git a/tests/app_ut/CMakeLists.txt b/tests/app_ut/CMakeLists.txt index 08ba35e6..7673090b 100644 --- a/tests/app_ut/CMakeLists.txt +++ b/tests/app_ut/CMakeLists.txt @@ -45,6 +45,6 @@ target_link_libraries(test_editorapplication PRIVATE if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_editorapplication PRIVATE gcov) endif() -gtest_discover_tests(test_editorapplication PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +gtest_discover_tests(test_editorapplication PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: app_ut module configured (test_editorapplication, links startmanager_ut_src)") diff --git a/tests/common/CMakeLists.txt b/tests/common/CMakeLists.txt index 89c24667..49bed86c 100644 --- a/tests/common/CMakeLists.txt +++ b/tests/common/CMakeLists.txt @@ -75,7 +75,7 @@ function(add_ut_target TARGET_NAME) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(${TARGET_NAME} PRIVATE gcov) endif() - gtest_discover_tests(${TARGET_NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(${TARGET_NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: ${TARGET_NAME} configured") endfunction() diff --git a/tests/common2/CMakeLists.txt b/tests/common2/CMakeLists.txt index bc3e59de..65c04bef 100644 --- a/tests/common2/CMakeLists.txt +++ b/tests/common2/CMakeLists.txt @@ -83,6 +83,6 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_common2 PRIVATE gcov) endif() -gtest_discover_tests(test_common2 PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +gtest_discover_tests(test_common2 PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: test_common2 configured with ${TEST_SOURCES}") diff --git a/tests/controls_ut/CMakeLists.txt b/tests/controls_ut/CMakeLists.txt index c3d043a0..26c7cf73 100644 --- a/tests/controls_ut/CMakeLists.txt +++ b/tests/controls_ut/CMakeLists.txt @@ -56,6 +56,6 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_controls_ut PRIVATE gcov) endif() -gtest_discover_tests(test_controls_ut PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +gtest_discover_tests(test_controls_ut PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: controls_ut configured with ${TEST_SOURCES}") diff --git a/tests/daemon_ut/CMakeLists.txt b/tests/daemon_ut/CMakeLists.txt index 91179e30..95dc87d4 100644 --- a/tests/daemon_ut/CMakeLists.txt +++ b/tests/daemon_ut/CMakeLists.txt @@ -66,7 +66,7 @@ function(daemon_ut_add_test TARGET_NAME TEST_SOURCE) daemon_ut_src GTest::gtest GTest::gtest_main) - gtest_discover_tests(${TARGET_NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(${TARGET_NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) endfunction() daemon_ut_add_test(test_daemon_utils test_utils.cpp) diff --git a/tests/editor_areas/CMakeLists.txt b/tests/editor_areas/CMakeLists.txt index 9cb66f47..aa2fbeae 100644 --- a/tests/editor_areas/CMakeLists.txt +++ b/tests/editor_areas/CMakeLists.txt @@ -98,7 +98,7 @@ function(ea_add_test name) GTest::gtest GTest::gtest_main Qt6::Test) - gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: test_${name} configured") endfunction() diff --git a/tests/editor_core/CMakeLists.txt b/tests/editor_core/CMakeLists.txt index c4fb585d..83bfccc6 100644 --- a/tests/editor_core/CMakeLists.txt +++ b/tests/editor_core/CMakeLists.txt @@ -102,7 +102,7 @@ function(ec_add_test name) GTest::gtest GTest::gtest_main Qt6::Test) - gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: test_${name} configured") endfunction() diff --git a/tests/editor_markdown/CMakeLists.txt b/tests/editor_markdown/CMakeLists.txt index b6aa935a..04458aa4 100644 --- a/tests/editor_markdown/CMakeLists.txt +++ b/tests/editor_markdown/CMakeLists.txt @@ -27,7 +27,7 @@ function(md_add_test name) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_${name} PRIVATE gcov) endif() - gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: test_${name} configured") endfunction() diff --git a/tests/editor_undo/CMakeLists.txt b/tests/editor_undo/CMakeLists.txt index efec5fb2..7cacd438 100644 --- a/tests/editor_undo/CMakeLists.txt +++ b/tests/editor_undo/CMakeLists.txt @@ -66,7 +66,7 @@ function(eu_add_test name) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_${name} PRIVATE gcov) endif() - gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(test_${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: test_${name} configured") endfunction() diff --git a/tests/editor_wrapper/CMakeLists.txt b/tests/editor_wrapper/CMakeLists.txt index f80e95af..af49b8c3 100644 --- a/tests/editor_wrapper/CMakeLists.txt +++ b/tests/editor_wrapper/CMakeLists.txt @@ -56,6 +56,6 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_editwrapper PRIVATE gcov) endif() -gtest_discover_tests(test_editwrapper PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +gtest_discover_tests(test_editwrapper PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: test_editwrapper configured (B8, links startmanager_ut_src)") diff --git a/tests/startmanager/CMakeLists.txt b/tests/startmanager/CMakeLists.txt index 4aee8867..164c61c5 100644 --- a/tests/startmanager/CMakeLists.txt +++ b/tests/startmanager/CMakeLists.txt @@ -123,8 +123,8 @@ target_link_libraries(test_startmanager_drag PRIVATE GTest::gtest GTest::gtest_main) -gtest_discover_tests(test_startmanager PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") -gtest_discover_tests(test_filetabinfo PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") -gtest_discover_tests(test_startmanager_drag PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +gtest_discover_tests(test_startmanager PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) +gtest_discover_tests(test_filetabinfo PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) +gtest_discover_tests(test_startmanager_drag PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: startmanager module configured (test_startmanager, test_filetabinfo, test_startmanager_drag)") diff --git a/tests/thememodule/CMakeLists.txt b/tests/thememodule/CMakeLists.txt index 89ea0f8c..6a15fa75 100644 --- a/tests/thememodule/CMakeLists.txt +++ b/tests/thememodule/CMakeLists.txt @@ -49,6 +49,6 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(test_thememodule PRIVATE gcov) endif() -gtest_discover_tests(test_thememodule PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") +gtest_discover_tests(test_thememodule PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) message(STATUS "UT: thememodule configured with ${TEST_SOURCES}") diff --git a/tests/widgets_ut/CMakeLists.txt b/tests/widgets_ut/CMakeLists.txt index 3d218121..46db64c3 100644 --- a/tests/widgets_ut/CMakeLists.txt +++ b/tests/widgets_ut/CMakeLists.txt @@ -47,7 +47,7 @@ function(add_widgets_ut_target NAME) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(${NAME} PRIVATE gcov) endif() - gtest_discover_tests(${NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") + gtest_discover_tests(${NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" DISCOVERY_TIMEOUT 30) endfunction() add_widgets_ut_target(test_ddropdownmenu)