XCTAssertUnrecoverable

Build Status platforms pod Carthage compatible Swift Package Manager compatible

该库使得测试通用错误/逻辑失败成为可能,即使你使用了 fatalErrorpreconditionFailure 等。

安装

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 Package Manager

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 会捕获一些信号,例如 SIGILLSIGABRT,所以你不能在调试器下使用此库。

重要提示:请注意构建配置和优化级别。

例如,assert 仅在 -Onone 构建中有效。
因此,它可能在其他优化级别下不会崩溃。

-Onone -O -Osize -Ounchecked
fatalError
precondition
assert

注意:尚不支持多线程。

// NG
XCTAssertUnrecoverable {
    DispatchQueue.global().async {
        fatalError("fatal error!")
    }
}

要求

Swift 4.1