XCTestUtils

Xcode 13-16 License: MIT

用于测试目标的实用 XCTest 工具和扩展。

概述

目前,该库提供了一小部分但非常有用的 XCTest 相关方法。

等待表达式

实现了两种等待方法,它们可能在异步测试场景中很有用,在这些场景中,无法使用 XCTest expectations。

这些方法允许在超时期间(以秒为单位)连续评估自动闭包表达式。如果等待超时,它会触发测试失败。默认情况下,每 10 毫秒进行一次评估,但可以使用自定义轮询周期覆盖间隔。

// wait for expression:
// useful for non-equatability tests or tests where the test value
// is not required to be logged in failure log messages
// (akin to XCTAssertTrue)
wait(for: x > 10, timeout: 1.5)
wait(for: x > 10, timeout: 1.5, "Description of waiter")

// closures can also be used for more complex expressions
wait(for: {
    let x = a + b
    let y = check ? 5 : 10
    return x == y
}, timeout: 1.5)
// wait for equality:
// useful where the test value is required to be logged in failure log messages
// (akin to XCTAssertEqual)
wait(for: x, equals: 10, timeout: 1.5)
wait(for: x, equals: 10, timeout: 1.5, "Description of waiter")

// closures can also be used for more complex expressions
wait(for: {
    let x = a + b
    return x > 10
}, equals: {
    #if os(macOS)
        10
    #else
        15
    #endif
}, timeout: 1.5)

通用等待

还提供了一种通用的非阻塞等待方法

wait(sec: 1.5) // seconds

UI 测试

实现了一小部分用于 XCUIElement 方法的抛出型包装器。

waitForExistence(timeout:) -> Bool 包装在抛出型方法中

let okButton = try await app
    .buttons["OK"]
    .waitForExistence(throwingTimeout: 2.0)

await okButton.click()

waitForNonExistence(timeout:) -> Bool 包装在抛出型方法中

let okButton = await app.buttons["OK"].firstMatch
try await okButton.waitForNonExistence(throwingTimeout: 2.0)

wait(for:toEqual:timeout:) -> Bool 包装在抛出型方法中

let okButton = await app.staticTexts["Idle"].firstMatch
try await okButton.wait(for: \.label, toEqual: "Active", throwingTimeout: 2.0)

安装:Swift Package Manager (SPM)

应用程序内的依赖项

  1. 使用 URL https://github.com/orchetect/XCTestUtils 将软件包添加到 Xcode 项目的测试目标中。

  2. 在需要的地方,在测试文件中导入模块。

    import XCTest
    import XCTestUtils

Swift 包内的依赖项

  1. Package.swift 文件中添加依赖项

    dependencies: [
        .package(url: "https://github.com/orchetect/XCTestUtils", from: "1.1.2")
    ],

用法

在需要的地方,在测试文件中导入模块。

import XCTest
import XCTestUtils

文档

此 README 作为基本文档。

所有方法都有内联帮助,解释其用途和基本用法示例。

要求

最低测试系统要求:macOS 11.3 或更高版本上的 Xcode 13 或更高版本

作者

由一群穿着外套的 🐹 仓鼠编码,自称 @orchetect

许可证

在 MIT 许可证下获得许可。 有关详细信息,请参阅 LICENSE

贡献

欢迎 Bug 修复和改进。 提交 PR 之前,请先打开 issue 进行讨论。