该库使得测试通用错误/逻辑失败成为可能,即使你使用了 fatalError
、preconditionFailure
等。
XCTAssertUnrecoverable
依赖于 johnno1962/Fortify,但为了目前支持 CocoaPods 和 Carthage,它被直接包含在了本库中。
# Podfile
use_frameworks!
target 'YOUR_TESTING_TARGET' do
pod 'XCTAssertUnrecoverable', '~> 1.0'
end
$ pod install
将其添加到 Cartfile.private
。
github "ukitaka/XCTAssertUnrecoverable"
$ carthage update
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 | ✅ | ✅ | ✅ | ✅ |
precondition | ✅ | ✅ | ✅ | ❌ |
assert | ✅ | ❌ | ❌ | ❌ |
注意:尚不支持多线程。
// NG
XCTAssertUnrecoverable {
DispatchQueue.global().async {
fatalError("fatal error!")
}
}
Swift 4.1