我使用
Swift Testing
框架在我的 iOS
应用程序中实现单元测试。在我的一项测试中,我需要验证 assertionFailure()
在某些条件下是否被触发。
这是一个示例代码片段:
func foo(bar: Bool) -> String {
if bar {
return "foobar"
} else {
assertionFailure("expected true but was false")
}
}
在这个例子中,我想测试当 bar 为 false 时是否调用
assertionFailure()
。是否可以使用 Swift Testing
框架捕获并验证此行为?如果可以的话我该怎么办?
如有任何见解或建议,我们将不胜感激!
您的
foo
演示方法甚至无法编译,因为 assertionFailure
只影响调试版本,因此不能保证您的方法始终返回值。
为
assertionFailure
编写单元测试(与发布版本相比,在调试版本中的行为有所不同)通常没有什么意义。
如果您实际上指的是
predconditionFailure
,它适用于调试和发布版本,那么 Swift 测试目前不支持测试此方法。
preconditionFailure
导致 Mach EXC_BAD_INSTRUCTION
异常,只能由相应的 Mach 异常处理程序捕获。
除了 Swift 测试之外,您还可以使用 Nimble 来测试
preconditionFailure
调用。
但是,我想指出,在使用
preconditionFailure
调用时应该非常小心,并且使用 Swift 的正常错误处理几乎总是更好。