如何处理Mac OS应用程序中单元测试目标中的崩溃



在应用程序中,我们可以注册以下代码集来捕获崩溃

signal(SIGILL) { _ in
print("Signal Kill")
}
ncaughtExceptionHandler { exception in
print("Exception caught: (exception)")
}

但我也想在单元测试目标中实现这一点。我该怎么做?

如果需要在单元测试运行之前安装信号处理程序,则可以创建类似于以下内容的.m文件:

// setup.m
static void __attribute__((constructor)) setup() {
// switch to Swift as soon as possible :)
[MySignalHandlers installAllHandlers];
}

,然后创建一个执行实际工作的 Swift 类。当然,你可以在 Objective-C 中编写信号处理程序,但由于你已经在 Swift 中拥有它们,你可以重用该逻辑。

// MySignalHandlers.swift
class MySignalHandlers: NSObject {
@objc static func installAllHandlers() {
// do your thing here
}
}

加载用__attribute__((constructor))修饰的函数时会自动执行,因此这保证了在任何单元测试运行之前安装信号处理程序。

最新更新