Skip to content

test: raise unit test coverage to 75.7% and stabilize test environment#693

Merged
pengfeixx merged 1 commit into
linuxdeepin:masterfrom
pengfeixx:test/ut-coverage-75
Jun 23, 2026
Merged

test: raise unit test coverage to 75.7% and stabilize test environment#693
pengfeixx merged 1 commit into
linuxdeepin:masterfrom
pengfeixx:test/ut-coverage-75

Conversation

@pengfeixx

Copy link
Copy Markdown
Contributor

Add unit tests for UI/DeviceManager/DBus/HTTP modules to raise line coverage.

为 UI/DeviceManager/DBus/HTTP 等模块新增单元测试,提升行覆盖率。

Fix cmake 3.31 Qt version misdetection and stub DBus calls in test_main.

修复 cmake 3.31 下 Qt 版本误检,并在 test_main 全局桩 DBus 调用避免服务阻塞。

Log: 提升单元测试覆盖率至75.7%并稳定测试环境
Influence: 前端覆盖率70.3%→75.7%,1100测试通过;修复cmake Qt6误检与DBus测试阻塞。

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @pengfeixx, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@github-actions

Copy link
Copy Markdown
  • 检测到敏感词export变动
详情
    {
    "export": {
        "deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_export.cpp": {
            "b": [
                "// \u8986\u76d6 DeviceManager \u7684\u5bfc\u51fa\u65b9\u6cd5 exportToTxt/Xlsx/Html + overviewToTxt/Html/Xlsx +",
                "// exportToDoc/overviewToDoc \u56e0 Docx::Document \u9ed8\u8ba4\u6784\u9020 SEGV \u6682\u8df3\u8fc7\u3002",
                "TEST_F(UT_DeviceManagerExport, exportToTxt)",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToTxt(\"/tmp/ut_dm_export.txt\"));",
                "TEST_F(UT_DeviceManagerExport, exportToXlsx)",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToXlsx(\"/tmp/ut_dm_export.xlsx\"));",
                "TEST_F(UT_DeviceManagerExport, exportToHtml)",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToHtml(\"/tmp/ut_dm_export.html\"));"
            ]
        }
    }
}

@pengfeixx pengfeixx force-pushed the test/ut-coverage-75 branch from 463ce00 to b9f5472 Compare June 23, 2026 02:41
@github-actions

Copy link
Copy Markdown
  • 检测到敏感词export变动
详情
    {
    "export": {
        "deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_export.cpp": {
            "b": [
                "// \u8986\u76d6 DeviceManager \u7684\u5bfc\u51fa\u65b9\u6cd5 exportToTxt/Xlsx/Html + overviewToTxt/Html/Xlsx +",
                "// exportToDoc/overviewToDoc \u56e0 Docx::Document \u9ed8\u8ba4\u6784\u9020 SEGV \u6682\u8df3\u8fc7\u3002",
                "TEST_F(UT_DeviceManagerExport, exportToTxt)",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToTxt(\"/tmp/ut_dm_export.txt\"));",
                "TEST_F(UT_DeviceManagerExport, exportToXlsx)",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToXlsx(\"/tmp/ut_dm_export.xlsx\"));",
                "TEST_F(UT_DeviceManagerExport, exportToHtml)",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToHtml(\"/tmp/ut_dm_export.html\"));"
            ]
        }
    }
}

Add unit tests for UI/DeviceManager/DBus/HTTP modules to raise line coverage.

为 UI/DeviceManager/DBus/HTTP 等模块新增单元测试,提升行覆盖率。

Fix cmake 3.31 Qt version misdetection and stub DBus calls in test_main.

修复 cmake 3.31 下 Qt 版本误检,并在 test_main 全局桩 DBus 调用避免服务阻塞。

Log: 提升单元测试覆盖率至75.7%并稳定测试环境
Influence: 前端覆盖率70.3%→75.7%,1100测试通过;修复cmake Qt6误检与DBus测试阻塞。
@pengfeixx pengfeixx force-pushed the test/ut-coverage-75 branch from b9f5472 to 07ca9c0 Compare June 23, 2026 02:47
@github-actions

Copy link
Copy Markdown
  • 检测到敏感词export变动
详情
    {
    "export": {
        "deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_save.cpp": {
            "b": [
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToTxt(\"/tmp/ut_dm_out.txt\"));",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToXlsx(\"/tmp/ut_dm_out.xlsx\"));",
                "    EXPECT_NO_FATAL_FAILURE(DeviceManager::instance()->exportToHtml(\"/tmp/ut_dm_out.html\"));"
            ]
        }
    }
}

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: lzwind, pengfeixx

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@pengfeixx pengfeixx merged commit e2e45cd into linuxdeepin:master Jun 23, 2026
17 of 18 checks passed
@pengfeixx pengfeixx deleted the test/ut-coverage-75 branch June 23, 2026 02:55
@deepin-ci-robot

Copy link
Copy Markdown

deepin pr auto review

★ 总体评分:95分

■ 【总体评价】

代码实现了CMake Qt版本探测修复并大幅补充了单元测试,质量良好但存在轻微内存泄漏
逻辑正确且测试覆盖全面,因全局桩对象未释放扣5分

■ 【详细分析】

  • 1.语法逻辑(完全正确)✓

CMakeLists.txt中将find_package拆分为显式探测Qt6再fallback Qt5的逻辑严谨,准确规避了CMake 3.31+的NAMES误检问题。新增的约20个测试文件准确覆盖了DeviceInput::getDetailBusInfo等核心函数的各个分支,Stub桩函数的签名与原函数严格匹配,测试断言使用合理。
建议:无

  • 2.代码质量(良好)✓

测试代码注释详尽,清晰说明了跳过某些用例的原因(如QProcess阻塞、Docx构造SEGV等)。使用-fno-access-control和Stub桩隔离了QProcess、QDBusInterface等外部依赖,测试解耦性好。
潜在问题:test_main.cpp中通过new创建的Stub对象未在进程结束前释放,造成内存泄漏;ut_devicemanager_save.cpp中硬编码了/tmp/ut_dm_out.txt等固定路径,在并行测试时可能产生文件读写冲突。
建议:将test_main.cpp中的Stub对象改为栈分配以自动析构释放;在ut_devicemanager_save.cpp中使用QTemporaryDir动态生成不冲突的临时文件路径。

  • 3.代码性能(无性能问题)✓

测试代码仅在编译和运行测试阶段生效,对生产环境的运行时性能无任何影响。CMake的探测逻辑改动仅在配置阶段执行一次,开销可忽略。
建议:无

  • 4.代码安全(存在0个安全漏洞)✓

漏洞对比统计:新增漏洞 0 个,减少漏洞 0 个,持平 0 个
代码变更全部位于构建脚本和测试模块中,不涉及生产环境的业务逻辑、网络通信或权限提升,不存在命令注入、路径遍历等安全风险。测试中硬编码的/tmp路径在Linux环境下属于安全可写目录,不构成安全漏洞。
建议:无

■ 【改进建议代码示例】

// test_main.cpp
#include <gtest/gtest.h>
#include <QApplication>
#include <DApplication>
#include <QDBusInterface>
#include <QDBusMessage>
#include <QDBusPendingCall>
#include <QVariant>
#include "stub.h"
#if defined(CMAKE_SAFETYTEST_ARG_ON)
#include <sanitizer/asan_interface.h>
#endif

DCORE_USE_NAMESPACE

static QDBusMessage ut_dbus_call(const QString &,
                                 const QVariant &, const QVariant &, const QVariant &, const QVariant &,
                                 const QVariant &, const QVariant &, const QVariant &, const QVariant &)
{
    return QDBusMessage().createReply(QVariant(true));
}

static QDBusPendingCall ut_dbus_asyncCall(const QString &,
                                          const QVariant &, const QVariant &, const QVariant &, const QVariant &,
                                          const QVariant &, const QVariant &, const QVariant &, const QVariant &)
{
    return QDBusPendingCall::fromCompletedCall(QDBusMessage().createReply(QVariant(true)));
}

int main(int argc, char **argv)
{
    qputenv("QT_QPA_PLATFORM", "offscreen");
    QApplication a(argc, argv);

    // 使用栈对象替代堆对象,确保在进程退出时自动调用析构函数释放资源,避免内存泄漏报告
    Stub stub;
    QDBusMessage (QDBusInterface::*pc)(const QString &, const QVariant &, const QVariant &,
        const QVariant &, const QVariant &, const QVariant &, const QVariant &,
        const QVariant &, const QVariant &) = &QDBusInterface::call;
    stub.set(pc, ut_dbus_call);
    QDBusPendingCall (QDBusInterface::*pa)(const QString &, const QVariant &, const QVariant &,
        const QVariant &, const QVariant &, const QVariant &, const QVariant &,
        const QVariant &, const QVariant &) = &QDBusInterface::asyncCall;
    stub.set(pa, ut_dbus_asyncCall);

    ::testing::InitGoogleTest(&argc, argv);
    auto c = RUN_ALL_TESTS();

#if defined(CMAKE_SAFETYTEST_ARG_ON)
    __sanitizer_report_summary_summary();
#endif
    return c;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants