已关闭
sync ontextselectionchange同步 #78380
duanshaofei创建于 2025年12月26日关闭于 2月4日
sync ontextselectionchange同步 #78380
已关闭
duanshaofei创建于 2025年12月26日关闭于 2月4日
共 1 个文件变更+8-0
@@ -2108,6 +2108,8 @@ HWTEST_F(WebSelectOverlayTest, RunQuickMenu_003, TestSize.Level1)
2108 stack->Push(frameNode);2108 stack->Push(frameNode);
2109 auto webPattern = frameNode->GetPattern<WebPattern>();2109 auto webPattern = frameNode->GetPattern<WebPattern>();
2110 EXPECT_NE(webPattern, nullptr);2110 EXPECT_NE(webPattern, nullptr);
2111+ webPattern->OnModifyDone();
arkui-feature-manager
arkui-feature-managerarkui-feature-manager2025年12月26日

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 测试代码中存在重复的设置逻辑

位置: L2111-L2112 | 严重程度: Medium

❓ 问题描述

在 RunQuickMenu_003, RunQuickMenu_004, RunQuickMenu_005, 和 RunQuickMenu_006 四个测试用例中,都添加了相同的两行代码:webPattern->OnModifyDone(); 和 ASSERT_NE(webPattern->delegate_, nullptr);。这种重复违反了DRY(Don't Repeat Yourself)原则。如果未来测试的初始化步骤发生变化(例如,需要调用另一个初始化函数,或需要增加更多的断言),开发者必须记得在所有四个地方进行修改,这很容易导致不一致,并增加了维护负担和引入错误的几率。

💡 修复建议

建议将这两行重复代码提取到一个辅助函数中,或者如果它们适用于所有或大部分 WebSelectOverlayTest 的用例,可以将它们移动到测试夹具的 SetUp() 方法中。这样可以集中管理初始化逻辑,提高代码的可维护性和可读性。

// Example refactoring using a helper function within the test class
RefPtr<WebPattern> WebSelectOverlayTest::CreateInitializedWebPattern(const RefPtr<FrameNode>& frameNode)
{
    auto webPattern = frameNode->GetPattern<WebPattern>();
    ASSERT_NE(webPattern, nullptr);
    webPattern->OnModifyDone();
    ASSERT_NE(webPattern->delegate_, nullptr);
    return webPattern;
}

// Usage in the test
HWTEST_F(WebSelectOverlayTest, RunQuickMenu_003, TestSize.Level1)
{
    // ... create frameNode
    // stack->Push(frameNode);
    auto webPattern = CreateInitializedWebPattern(frameNode); // Replaces the 4 original lines
    MockPipelineContext::SetUp();
    WebSelectOverlay overlay(webPattern);
    // ...
}

likedislike
duanshaofei
2025年12月26日 评论:
2112+ ASSERT_NE(webPattern->delegate_, nullptr);
2111 MockPipelineContext::SetUp();2113 MockPipelineContext::SetUp();
2112 WebSelectOverlay overlay(webPattern);2114 WebSelectOverlay overlay(webPattern);
2113 std::shared_ptr<OHOS::NWeb::NWebQuickMenuParams> params =2115 std::shared_ptr<OHOS::NWeb::NWebQuickMenuParams> params =
@@ -2141,6 +2143,8 @@ HWTEST_F(WebSelectOverlayTest, RunQuickMenu_004, TestSize.Level1)
2141 stack->Push(frameNode);2143 stack->Push(frameNode);
2142 auto webPattern = frameNode->GetPattern<WebPattern>();2144 auto webPattern = frameNode->GetPattern<WebPattern>();
2143 EXPECT_NE(webPattern, nullptr);2145 EXPECT_NE(webPattern, nullptr);
2146+ webPattern->OnModifyDone();
2147+ ASSERT_NE(webPattern->delegate_, nullptr);
2144 MockPipelineContext::SetUp();2148 MockPipelineContext::SetUp();
2145 WebSelectOverlay overlay(webPattern);2149 WebSelectOverlay overlay(webPattern);
2146 std::shared_ptr<OHOS::NWeb::NWebQuickMenuParams> params =2150 std::shared_ptr<OHOS::NWeb::NWebQuickMenuParams> params =
@@ -6430,6 +6434,8 @@ HWTEST_F(WebSelectOverlayTest, RunQuickMenu_005, TestSize.Level1)
6430 stack->Push(frameNode);6434 stack->Push(frameNode);
6431 auto webPattern = frameNode->GetPattern<WebPattern>();6435 auto webPattern = frameNode->GetPattern<WebPattern>();
6432 ASSERT_NE(webPattern, nullptr);6436 ASSERT_NE(webPattern, nullptr);
6437+ webPattern->OnModifyDone();
zhufenghao
zhufenghaozhufenghao2025年12月29日

确保TDD运行正确,且无虚判断

likedislike
6438+ ASSERT_NE(webPattern->delegate_, nullptr);
6433 MockPipelineContext::SetUp();6439 MockPipelineContext::SetUp();
6434 WebSelectOverlay overlay(webPattern);6440 WebSelectOverlay overlay(webPattern);
6435 std::shared_ptr<OHOS::NWeb::NWebQuickMenuParams> params =6441 std::shared_ptr<OHOS::NWeb::NWebQuickMenuParams> params =
@@ -6471,6 +6477,8 @@ HWTEST_F(WebSelectOverlayTest, RunQuickMenu_006, TestSize.Level1)
6471 stack->Push(frameNode);6477 stack->Push(frameNode);
6472 auto webPattern = frameNode->GetPattern<WebPattern>();6478 auto webPattern = frameNode->GetPattern<WebPattern>();
6473 ASSERT_NE(webPattern, nullptr);6479 ASSERT_NE(webPattern, nullptr);
6480+ webPattern->OnModifyDone();
6481+ ASSERT_NE(webPattern->delegate_, nullptr);
6474 MockPipelineContext::SetUp();6482 MockPipelineContext::SetUp();
6475 WebSelectOverlay overlay(webPattern);6483 WebSelectOverlay overlay(webPattern);
6476 g_isLongPress = false;6484 g_isLongPress = false;