用于测试目标的实用 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
实现了一小部分用于 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)
使用 URL https://github.com/orchetect/XCTestUtils
将软件包添加到 Xcode 项目的测试目标中。
在需要的地方,在测试文件中导入模块。
import XCTest
import XCTestUtils
在 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 进行讨论。