Skip to content

Latest commit

 

History

History
162 lines (115 loc) · 5.47 KB

File metadata and controls

162 lines (115 loc) · 5.47 KB

ElementTree 单元测试总结

测试覆盖范围

根据 ElementTree.md 的要求,已实现完整的单元测试覆盖以下场景:

✅ Style 属性继承测试 (7个测试用例)

  1. testStyleInheritance_Font - 测试 font 属性继承

    • 验证子元素继承父元素的字体
  2. testStyleInheritance_Color - 测试 color 属性继承

    • 验证子元素继承父元素的颜色
  3. testStyleInheritance_TextDecoration - 测试 textDecoration 属性继承

    • 验证子元素继承父元素的文本装饰(下划线、删除线)
  4. testStyleInheritance_FontStyle - 测试 fontStyle 属性继承

    • 验证子元素继承父元素的字体样式(普通、斜体)
  5. testStyleInheritance_ChildOverridesParent - 测试子元素覆盖父元素属性

    • 验证子元素自身的属性优先级高于继承的属性
  6. testStyleInheritance_MultiLevel - 测试多级继承

    • 验证三层嵌套结构中的属性继承链
    • 验证不同层级的属性覆盖机制
  7. testStyleInheritance_NonInheritableProperties - 测试不可继承属性

    • 验证 margin、padding、backgroundColor 等属性不会被继承
    • 符合 CSS 规范

✅ Element 添加/删除子元素测试 (7个测试用例)

  1. testAddChild_SingleChild - 测试添加单个子元素

    • 验证子元素正确添加到 children 数组
    • 验证父子关系正确建立
  2. testAddChild_MultipleChildren - 测试添加多个子元素

    • 验证多个子元素按顺序添加
    • 验证所有父子关系正确建立
  3. testRemoveChild_ExistingChild - 测试删除已存在的子元素

    • 验证子元素从 children 数组中移除
    • 验证父子关系正确解除
  4. testRemoveChild_NonExistingChild - 测试删除不存在的子元素

    • 验证删除不存在的子元素不会产生副作用
  5. testRemoveAllChildren - 测试删除所有子元素

    • 验证所有子元素被移除
    • 验证所有父子关系被解除
  6. testAddChild_NestedHierarchy - 测试嵌套层级结构

    • 验证多层嵌套的父子关系正确建立
  7. testLeafElement_CannotAddChildren - 测试叶子节点不能添加子元素

    • 文档说明叶子元素(Text、Attachment)不应有子元素

✅ ElementTree 查询和遍历测试 (6个测试用例)

  1. testElementTree_TextContent - 测试获取全部文本内容

    • 验证 textContent() 返回所有文本元素的拼接
  2. testElementTree_ElementCount - 测试元素计数

    • 验证 elementCount 返回树中所有元素的数量
  3. testElementTree_Depth - 测试树深度

    • 验证 depth 返回正确的树深度
  4. testElementTree_FindAll - 测试查找所有匹配元素

    • 验证 findAll() 返回所有符合条件的元素
  5. testElementTree_FindFirst - 测试查找第一个匹配元素

    • 验证 findFirst() 返回第一个符合条件的元素
  6. testElementTree_AllTextElements - 测试获取所有文本元素

    • 验证 allTextElements() 只返回 TextElement 类型
  7. testElementTree_AllAttachmentElements - 测试获取所有附件元素

    • 验证 allAttachmentElements() 只返回 AttachmentElement 类型

✅ Style 工具方法测试 (4个测试用例)

  1. testStyle_MarginConvenience - 测试 margin() 便捷方法

    • 验证一次性设置所有 margin
  2. testStyle_PaddingConvenience - 测试 padding() 便捷方法

    • 验证一次性设置所有 padding
  3. testStyle_HorizontalMargin - 测试水平 margin 计算

    • 验证 horizontalMargin 返回 left + right 总和
  4. testStyle_VerticalPadding - 测试垂直 padding 计算

    • 验证 verticalPadding 返回 top + bottom 总和

测试统计

  • 总测试用例数: 24
  • Style 继承相关: 7 个
  • Element 操作相关: 7 个
  • ElementTree 查询相关: 6 个
  • Style 工具方法: 4 个

测试方法

所有测试使用 Given-When-Then 模式编写:

func testStyleInheritance_Font() {
    // Given: Parent with font
    let parentStyle = Style()
    parentStyle.font = UIFont.systemFont(ofSize: 20)
    let parent = BlockElement(style: parentStyle)

    // When: Child without font
    let childStyle = Style()
    let child = TextElement(text: "Test", style: childStyle)
    parent.addChild(child)

    // Then: Child inherits parent's font
    let resolvedStyle = child.resolvedStyle
    XCTAssertNotNil(resolvedStyle.font)
    XCTAssertEqual(resolvedStyle.font?.pointSize, 20)
}

运行测试

通过 Xcode

  1. 打开 RichViewDemo.xcworkspace
  2. 选择 RichViewDemo scheme
  3. Cmd+U 运行所有测试
  4. 或右键点击 RichViewDemoTests 类,选择 "Run Tests"

通过命令行

xcodebuild test \
  -workspace RichViewDemo.xcworkspace \
  -scheme RichViewDemo \
  -destination 'platform=iOS Simulator,name=iPhone 16' \
  -only-testing:RichViewDemoTests/RichViewDemoTests

测试文件位置

覆盖的核心功能

✅ Style 继承机制(符合 CSS 规范) ✅ 可继承属性:font, color, textDecoration, fontStyle ✅ 不可继承属性:margin, padding, backgroundColor, border 等 ✅ Element 父子关系管理 ✅ ElementTree 树遍历和查询 ✅ 多层级嵌套结构

备注

测试代码完全符合 ElementTree.md 中的要求:

  • ✅ Style的属性继承生效
  • ✅ Element 的添加、删除子元素生效