XCTAssertUnrecoverable
此库使得即使使用 fatalError
、preconditionFailure
等测试,也能够测试全局错误/逻辑失败的特性。
安装
XCTAssertUnrecoverable
依赖于 johnno1962/Fortify,但为了直接支持 CocoaPods 和 Carthage,它已被包含在该库中。
CocoaPods
# Podfile
use_frameworks!
target 'YOUR_TESTING_TARGET' do
pod 'XCTAssertUnrecoverable', '~> 1.0'
end
$ pod install
Carthage
将其添加到 Cartfile.private
。
github "ukitaka/XCTAssertUnrecoverable"
$ carthage update
Swift 包管理器
let package = Package(
name: "YourModule",
dependencies: [
.package(url: "https://github.com/ukitaka/XCTAssertUnrecoverable.git", "1.0.0")
],
targets: [
.target(
name: "YourModule",
dependencies: [ ... ]),
.testTarget(
name: "YourModuleTests",
dependencies: ["XCTAssertUnrecoverable"]),
]
)
$ swift build
用法
仅提供了一个函数 XCTAssertUnrecoverable
。
import XCTest
import XCTAssertUnrecoverable
class ExampleTests: XCTestCase {
func testExample() {
XCTAssertUnrecoverable {
// some program that will crash.
}
}
}
重要:请禁用调试器。
lldb
会截获一些信号,例如 SIGILL
、SIGABRT
,因此您 不能 在调试器中使用此库。
重要:注意构建配置和优化级别。
例如,assert
只在 -Onone
构建中工作。
因此,在其他优化级别中可能不会崩溃。
-Onone | -O | -Osize | -Ounchecked | |
---|---|---|---|---|
fatalError | ||||
先决条件 | ||||
assert |
注意:尚不支持多线程。
// NG
XCTAssertUnrecoverable {
DispatchQueue.global().async {
fatalError("fatal error!")
}
}
要求
Swift 4.1