如何处理 Mac OS 应用程序中单元测试目标的崩溃
How to handle crashes in unit test target in Mac OS application
在应用程序中我们可以注册下面的代码集来捕获崩溃
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 class。当然,您可以在 Objective-C 中编写信号处理程序,但由于您已经在 Swift 中编写了它们,因此您可以重用该逻辑。
// MySignalHandlers.swift
class MySignalHandlers: NSObject {
@objc static func installAllHandlers() {
// do your thing here
}
}
用 __attribute__((constructor))
装饰的函数会在加载包含它们的二进制文件时自动执行,因此这保证了在任何单元测试之前安装信号处理程序 运行。
在应用程序中我们可以注册下面的代码集来捕获崩溃
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 class。当然,您可以在 Objective-C 中编写信号处理程序,但由于您已经在 Swift 中编写了它们,因此您可以重用该逻辑。
// MySignalHandlers.swift
class MySignalHandlers: NSObject {
@objc static func installAllHandlers() {
// do your thing here
}
}
用 __attribute__((constructor))
装饰的函数会在加载包含它们的二进制文件时自动执行,因此这保证了在任何单元测试之前安装信号处理程序 运行。