我正在将一些单元测试从 XCTest 转换为 Swift 测试,并且我正在寻找一种故意使测试失败的方法,如下所示:
if let event = SentryManager.events.first, let message = event.message {
XCTAssertEqual(event.formatted, "hello")
} else {
XCTFail()
}
我主要在测试期间展开值时使用它,到目前为止我还没有找到“失败测试”命令,这使得翻译这些单元测试有点烦人。
不完美的替代方案:
使用可选的展开,就像这样
#expect(SentryManager.events.first?.message?.formatted == "hello")
导致 Optional("hello") 和 "hello" 之间的比较,因此不起作用。
强制展开,就像这样
#expect(SentryManager.events.first!.message!.formatted == "hello")
如果我们检查的字符串是错误的,那么这里会正确失败。不过,我想避免在这里强制展开,尽管这是一个单元测试并且比平常更好,一旦 linter 开始抱怨,这将需要使用一些 swiftlint 忽略。有没有办法使用新的 Swift 测试框架故意让测试失败?
最后,XCTest 有一个功能,请参阅文档中的
XCTFail()
,可以导致测试立即无条件失败。当语言语法不允许使用XCTAssert()
函数时,此函数非常有用。要使用测试库记录无条件问题,请使用Issue.record(_:sourceLocation:)
函数:
从 XCTest 迁移测试指南。还有一个例子。