You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XCTest(Swift 5)中测试导入的自定义字体

自定义字体验证与XCTest测试实现

一、手动验证文本框字体的方法

  • 对比渲染效果:将使用Roboto-Regular的文本与系统默认字体(如San Francisco)的相同文本并列,通过字形差异(字母间距、笔画粗细等)直观判断。
  • 调试视图检查:在Xcode的Debug View Hierarchy中选中目标文本框,查看其font属性的name字段是否为Roboto-Regular。
  • 打印字体信息:在代码中添加打印语句,直接输出文本框的字体详情:
    print("当前字体名称:\(textField.font?.fontName ?? "未知"), 字体大小:\(textField.font?.pointSize ?? 0)")
    

二、XCTest自动化测试实现逻辑

前置条件

确保项目已正确导入字体文件,并在Info.plist的Fonts provided by application字段中配置对应字体文件名(如Roboto-Regular.ttf)。

测试用例代码

import XCTest
@testable import YourAppName // 替换为你的项目名称

class FontValidationTests: XCTestCase {
    // 验证文本框是否使用Roboto-Regular字体
    func testTextFieldUsesRobotoRegularFont() {
        // 创建测试用文本框并设置内容
        let textField = UITextField()
        textField.text = "Stack overflow"
        
        // 应用自定义字体
        textField.font = UIFont.robotoRegular(size: 17)
        
        // 断言验证
        XCTAssertNotNil(textField.font, "Roboto-Regular字体加载失败")
        XCTAssertEqual(textField.font?.fontName, "Roboto-Regular", "文本框未使用指定的Roboto-Regular字体")
        XCTAssertEqual(textField.font?.pointSize, 17, "字体大小不符合预期值")
    }
    
    // 单独验证Roboto-Bold字体加载是否正常
    func testRobotoBoldFontLoading() {
        let testFont = UIFont.robotoBold(size: 17)
        XCTAssertNotNil(testFont, "Roboto-Bold字体加载失败")
        XCTAssertEqual(testFont?.fontName, "Roboto-Bold", "Roboto-Bold字体名称不匹配")
    }
}

附:UIFont扩展代码

import UIKit

extension UIFont {
    static func robotoRegular(size: CGFloat) -> UIFont? {
        return UIFont(name: "Roboto-Regular", size: size)
    }

    static func robotoBold(size: CGFloat) -> UIFont? {
        return UIFont(name: "Roboto-Bold", size: size)
    }
}

内容的提问来源于stack exchange,提问作者Gucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 01:06:40