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

时间:2019-03-25 10:31:20

标签: ios swift unit-testing

我的应用程序支持动态字体。当用户更改设置(Settings > General > Accessibility > Larger Text中的字体大小并跳回到应用程序时,则应该更新每个标签。

它是通过重写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)
}

现在,我需要测试其他视图是否对标签的动态性质做出正确反应。

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

  1. 使用标签创建视图
  2. 获取视图大小
  3. 将系统字体更改为大字体
  4. 获取视图大小
  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"
    )
}

1 个答案:

答案 0 :(得分:1)

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

    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中测试