Repository navigation
test(DeviceManager): 重写 DeviceManager/DeviceInfo 单元测试补全覆盖率 - #899
Conversation
|
Sorry @add-uos, your pull request is larger than the review limit of 150,000 diff characters |
|
Warning
详情 {
"lshw": {
"deepin-devicemanager/tests/src/DeviceManager/ut_deviceinfo_export.cpp": [
" // Arrange: hwinfo \u952e\u4e0e lshw \u603b\u7ebf\u4fe1\u606f\u4e00\u81f4"
],
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager.cpp": [
" // Arrange: \u9f20\u6807\u8bbe\u5907 businfo \u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u5339\u914d\u586b\u5145\u9f20\u6807\u4fe1\u606f",
" // Act: \u4ece lshw \u5339\u914d\u586b\u5145\u9f20\u6807\u4fe1\u606f",
" // Act: \u4ece lshw \u586b\u5145\u5b58\u50a8\u8bbe\u5907\u4fe1\u606f",
" // Act: \u4ece lshw \u586b\u5145 NVME \u5b58\u50a8\u8bbe\u5907\u4fe1\u606f",
" // Act: \u4ece lshw \u586b\u5145\u663e\u5361\u4fe1\u606f",
" // Arrange: \u84dd\u7259\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u84dd\u7259\u4fe1\u606f",
" // Arrange: \u97f3\u9891\u8bbe\u5907\u5339\u914d\u952e\u4e3a PCI \u5730\u5740, lshw \"bus info\" \u5e26 pci@ \u524d\u7f00",
" // Act: \u4ece lshw \u586b\u5145\u97f3\u9891\u8bbe\u5907\u4fe1\u606f",
" // Arrange: \u952e\u76d8\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u952e\u76d8\u8bbe\u5907\u4fe1\u606f",
" // Arrange: \u5176\u4ed6\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u5176\u4ed6\u8bbe\u5907\u4fe1\u606f",
" // Arrange: \u5149\u9a71\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u5149\u9a71\u8bbe\u5907\u4fe1\u606f"
],
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_set.cpp": [
" // Arrange: \u6444\u50cf\u5934\u8bbe\u5907 hwinfo \u603b\u7ebf\u4fe1\u606f\u4e0e lshw \u6620\u5c04\u4e00\u81f4",
" // Act: \u4ece lshw \u6ce8\u5165"
]
},
"dmidecode": {
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_set.cpp": [
" // Arrange: \u9ed8\u8ba4\u5185\u5b58\u8bbe\u5907(m_Locator \u4e3a\u7a7a)\u4e0e\u542b Locator \u7684 dmidecode \u6620\u5c04",
" // Act: \u4ece dmidecode \u6ce8\u5165",
" // Act: \u4ece dmidecode \u6ce8\u5165"
]
}
}
详情 {
"export": {
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_save.cpp": {
"a": [
" 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\"));"
],
"b": [
"// \u8986\u76d6: exportToTxt/exportToXlsx/exportToHtml\u3001overviewToTxt/overviewToHtml/",
"// | exportToTxt | mid | - | 2 | 2 |",
"// | exportToXlsx | low | - | 1 | 1 |",
"// | exportToHtml | low | - | 1 | 1 |",
"// exportToTxt: \u7a7a\u8bbe\u5907\u5217\u8868\u5199\u5165\u6709\u6548\u6587\u4ef6(\u542b\u8868\u5934); \u4e0d\u53ef\u5199\u8def\u5f84\u8fd4\u56de false",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToTxt_valid)",
" bool ok = DeviceManager::instance()->exportToTxt(path);",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToTxt_badPath)",
" bool ok = DeviceManager::instance()->exportToTxt(tmpDir->filePath(\"no_such_dir/x.txt\"));",
"// exportToXlsx: \u7a7a\u8bbe\u5907\u5217\u8868\u751f\u6210\u6709\u6548 xlsx \u6587\u4ef6",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToXlsx)",
" bool ok = DeviceManager::instance()->exportToXlsx(path);",
"// exportToHtml: \u7a7a\u8bbe\u5907\u5217\u8868\u751f\u6210\u975e\u7a7a html \u6587\u4ef6",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToHtml)",
" bool ok = DeviceManager::instance()->exportToHtml(path);"
]
}
}
} |
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ✅评价: 语法正确,逻辑清晰 ✅ 通过 潜在问题: 建议: ['无语法逻辑问题'] 2. 代码质量 ✅评价: 代码结构清晰,注释完整 ✅ 通过 潜在问题: 建议: ['少量测试用例存在轻微冗余断言(如同时使用 EXPECT_EQ(0, x.size()) 和 EXPECT_TRUE(x.isEmpty())),但测试代码中属可接受风格'] 3. 代码性能 ✅评价: 性能良好,资源使用合理 ✅ 通过 潜在问题: 建议: ['无性能问题'] 4. 代码安全 🔒评价: 存在0个安全漏洞 ✅ 通过
安全漏洞详情: 建议: ['无安全问题'] 💡 改进建议代码示例// 本次提交代码质量优秀,无需修复。以下为测试编写的最佳实践示例(已在本次提交中体现):
// 1. SetUp/TearDown 管理对象生命周期,避免成员初始化处 new
class UT_DeviceInfo : public ::testing::Test {
public:
void SetUp() override {
ut_disable_system_dbus();
audio = new DeviceAudio;
}
void TearDown() override {
delete audio;
audio = nullptr;
}
DeviceAudio *audio = nullptr; // 初始化为 nullptr
};
// 2. AAA 注释模式
TEST_F(UT_DeviceInfo, Example) {
// Arrange
// Act
// Assert
}本报告由 AI 代码审查工具自动生成 |
Log: 重写 ut_devicemanager.cpp 及 6 个分组用例文件, 用例数从 98 扩充到 110 - 保留合理用例, 断言空洞/过时用例重写, 统一 AAA 注释与场景化三段式命名 - 核心流程覆盖: createDevice/clear/getDeviceTypes/setDeviceListClass/findByModalias - 分组覆盖: mergeDisk/exportToTxt/setMemoryInfoFromDmidecode/tomlDeviceMapSet/ deleteDisableDuplicate_AudioDevice/setMonitorInfoFromDbus 等 - 外部依赖(cmdInfo/DBus)全部打桩, 用例自包含不依赖执行顺序与真实设备环境 - 结构自检 0 错误, 编译 0 错误, 全部用例通过 Influence: DeviceManager 模块测试覆盖率提升(86/100 方法), 不影响业务逻辑
Log: 重写 ut_deviceinfo.cpp 及 base/export 分组用例文件, 用例数从 86 扩充到 124 - 以 DeviceCpu/DeviceAudio 为载体覆盖 DeviceBaseInfo 全部可测方法 - 高优方法: isValueValid/get_string/getVendorOrModelId/setHwinfoLshwKey 全分支 - 基础属性: setAttribute/displayWidth/getTableHeader/getTableData/Attribs 翻译族 - 导出链路: baseInfoToHTML/Xlsx/Txt/Html/Doc 及 setVendorNameBylsusbLspci(QProcess 桩)/ getDriverVersion(execClientCmd 桩)/driverIsKernelIn/modalias 匹配 - 外部依赖(lsusb/lspci/modinfo/DBus)全部打桩, 不依赖真实设备环境 - 结构自检 0 错误, 编译 0 错误, 全部用例通过 Influence: DeviceBaseInfo 模块测试覆盖率提升(52/71 方法), 不影响业务逻辑
单测桩改为进程级一次性打桩避免重复 Stub::set 累积泄漏; 补齐音频设备/类别映射用例的设备释放, 消除 LSan 新增泄漏; SetUp 注入 ut_disable_system_dbus 隔离 DBusInterface::getInfo, 避免运行期触发系统总线 polkit 鉴权弹窗。 Log: 无需提交翻译
The license-check CI (SPDX Header Validation) requires files created in earlier years and modified in 2026 to carry a copyright year range ending with the current year. Extend the SPDX-FileCopyrightText header of the test helper ut_Head.h from 2022 to 2022-2026 so the SPDX summary reports 0 failures.
|
Warning
详情 {
"lshw": {
"deepin-devicemanager/tests/src/DeviceManager/ut_deviceinfo_export.cpp": [
" // Arrange: hwinfo \u952e\u4e0e lshw \u603b\u7ebf\u4fe1\u606f\u4e00\u81f4"
],
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager.cpp": [
" // Arrange: \u9f20\u6807\u8bbe\u5907 businfo \u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u5339\u914d\u586b\u5145\u9f20\u6807\u4fe1\u606f",
" // Act: \u4ece lshw \u5339\u914d\u586b\u5145\u9f20\u6807\u4fe1\u606f",
" // Act: \u4ece lshw \u586b\u5145\u5b58\u50a8\u8bbe\u5907\u4fe1\u606f",
" // Act: \u4ece lshw \u586b\u5145 NVME \u5b58\u50a8\u8bbe\u5907\u4fe1\u606f",
" // Act: \u4ece lshw \u586b\u5145\u663e\u5361\u4fe1\u606f",
" // Arrange: \u84dd\u7259\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u84dd\u7259\u4fe1\u606f",
" // Arrange: \u97f3\u9891\u8bbe\u5907\u5339\u914d\u952e\u4e3a PCI \u5730\u5740, lshw \"bus info\" \u5e26 pci@ \u524d\u7f00",
" // Act: \u4ece lshw \u586b\u5145\u97f3\u9891\u8bbe\u5907\u4fe1\u606f",
" // Arrange: \u952e\u76d8\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u952e\u76d8\u8bbe\u5907\u4fe1\u606f",
" // Arrange: \u5176\u4ed6\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u5176\u4ed6\u8bbe\u5907\u4fe1\u606f",
" // Arrange: \u5149\u9a71\u8bbe\u5907\u5339\u914d\u952e\u4e0e lshw \"bus info\" \u4e00\u81f4",
" // Act: \u4ece lshw \u586b\u5145\u5149\u9a71\u8bbe\u5907\u4fe1\u606f"
],
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_set.cpp": [
" // Arrange: \u6444\u50cf\u5934\u8bbe\u5907 hwinfo \u603b\u7ebf\u4fe1\u606f\u4e0e lshw \u6620\u5c04\u4e00\u81f4",
" // Act: \u4ece lshw \u6ce8\u5165"
]
},
"dmidecode": {
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_set.cpp": [
" // Arrange: \u9ed8\u8ba4\u5185\u5b58\u8bbe\u5907(m_Locator \u4e3a\u7a7a)\u4e0e\u542b Locator \u7684 dmidecode \u6620\u5c04",
" // Act: \u4ece dmidecode \u6ce8\u5165",
" // Act: \u4ece dmidecode \u6ce8\u5165"
]
}
}
详情 {
"export": {
"deepin-devicemanager/tests/src/DeviceManager/ut_devicemanager_save.cpp": {
"a": [
" 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\"));"
],
"b": [
"// \u8986\u76d6: exportToTxt/exportToXlsx/exportToHtml\u3001overviewToTxt/overviewToHtml/",
"// | exportToTxt | mid | - | 2 | 2 |",
"// | exportToXlsx | low | - | 1 | 1 |",
"// | exportToHtml | low | - | 1 | 1 |",
"// exportToTxt: \u7a7a\u8bbe\u5907\u5217\u8868\u5199\u5165\u6709\u6548\u6587\u4ef6(\u542b\u8868\u5934); \u4e0d\u53ef\u5199\u8def\u5f84\u8fd4\u56de false",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToTxt_valid)",
" bool ok = DeviceManager::instance()->exportToTxt(path);",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToTxt_badPath)",
" bool ok = DeviceManager::instance()->exportToTxt(tmpDir->filePath(\"no_such_dir/x.txt\"));",
"// exportToXlsx: \u7a7a\u8bbe\u5907\u5217\u8868\u751f\u6210\u6709\u6548 xlsx \u6587\u4ef6",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToXlsx)",
" bool ok = DeviceManager::instance()->exportToXlsx(path);",
"// exportToHtml: \u7a7a\u8bbe\u5907\u5217\u8868\u751f\u6210\u975e\u7a7a html \u6587\u4ef6",
"TEST_F(UT_DeviceManagerSave, UT_DeviceManagerSave_exportToHtml)",
" bool ok = DeviceManager::instance()->exportToHtml(path);"
]
}
}
} |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: add-uos, lzwind The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
/forcemerge |
|
This pr force merged! (status: unstable) |
单元测试重写:DeviceManager / DeviceInfo(Issue V-6200)
基于
upstream/master(b478f9e0)重写以下两个类的 Google Test 单元测试,并补齐覆盖:src/DeviceManager/DeviceManager.cpp(100 方法)src/DeviceManager/DeviceInfo.cpp(71 方法)变更内容(仅测试源码文件,共 11 个,tests/src/ 下)
ut_*.cpp:234 个用例,AAA 结构、真实断言、外部依赖(DBus/文件系统)打桩隔离ut_Head.h新增ut_disable_system_dbus():桩掉DBusInterface::getInfo,隔离真实系统总线调用,避免运行期触发 polkit 鉴权弹窗(进程级一次性打桩,无累积泄漏)验证结果
deepin-devicemanager-test构建通过(Qt6/DTK6,Debug+覆盖率)