ios - 如何在单元测试期间以编程方式编辑 iPhone 辅助功能设置?

标签 ios swift unit-testing

我的应用程序支持动态字体。当用户在设置中更改字体大小(设置 > 常规 > 辅助功能 > 较大文本)并跳回应用程序时,每个标签都应该更新。

通过重写UILabel的函数来实现

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    guard previousTraitCollection?.preferredContentSizeCategory != traitCollection.preferredContentSizeCategory else { return }

    let metrics: UIFontMetrics = UIFontMetrics(
        forTextStyle: UIFont.TextStyle.body
    )
    font = metrics.scaledFont(for: font)
}

现在我需要测试其他 View 是否对标签的动态特性做出正确 react 。

具体来说,我想要进行以下单元测试:

  1. 创建带标签的 View
  2. 获取 View 大小
  3. 将系统字体更改为更大
  4. 获取 View 大小
  5. 比较尺寸是否发生变化
func testDynamicFont() {

    let v: MyView = MyView()
    let oldSize: CGSize = v.intrinsicContentSize
    ??? What to do here? ???
    let newSize: CGSize = v.intrinsicContentSize
    XCTAssertNotEqual(
        oldSize, 
        newSize, 
        "Size of view should adjust to new environment"
    )
}

最佳答案

您可以使用以下代码增加系统字体大小。

    let settings = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
    settings.launch()
    settings.tables.staticTexts["General"].tap()
    settings.tables.staticTexts["Accessibility"].tap()
    settings.tables.staticTexts["Larger Text"].tap()
    settings.sliders.element.adjust(toNormalizedSliderPosition: 0.7) // Increase as you need

要返回您自己的应用程序,

let yourapp = XCUIApplication(bundleIdentifier: "com.xxx.yourappbundleid")
yourapp.activate()

在 iPhone(真实设备)、iOS 12.1.4 中测试

关于ios - 如何在单元测试期间以编程方式编辑 iPhone 辅助功能设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55335786/

相关文章:

ios - 事件应用程序中的应用程序内购买失败

ios - UIView Animate 只有在 IBAction 中时才会动画。我如何让它在我的情况下动画?

unit-testing - Karma 没有运行测试

ios - 如何在 Swift 中创建具有多个模型的通用数组?

ios - 读取文件后 Objective-C 因 EXC_BAD_ACCESS 崩溃

objective-c - 尝试使用 set 和 segue 来设置属性

ios - 在 iOS 应用程序中运行 R

ios - 如何在 View Controller 的背景中设置自定义颜色

使用 AsyncTask 和 UI 更新解决方案的 Android 单元测试

java - Ant 是否可以在构建结束时列出失败的测试?