如何fatalError在Swift中为代码路径实现单元测试?
fatalError
例如,我有以下快速代码
func divide(x: Float, by y: Float) -> Float { guard y != 0 else { fatalError("Zero division") } return x / y }
我想对y = 0的情况进行单元测试。
注意,我要使用fatalError而不是其他任何断言函数。
Nimble(“用于Swift和Objective- C的Matcher框架”)得到了支持:
迅捷断言 如果使用的是Swift,则可以使用throwAssertion匹配器检查是否抛出了断言(例如fatalError())。这可以通过@mattgallagher的CwlPreconditionTesting库来实现。
迅捷断言
如果使用的是Swift,则可以使用throwAssertion匹配器检查是否抛出了断言(例如fatalError())。这可以通过@mattgallagher的CwlPreconditionTesting库来实现。
// Swift // Passes if 'somethingThatThrows()' throws an assertion, // such as by calling 'fatalError()' or if a precondition fails: expect { try somethingThatThrows() }.to(throwAssertion()) expect { () -> Void in fatalError() }.to(throwAssertion()) expect { precondition(false) }.to(throwAssertion()) // Passes if throwing an NSError is not equal to throwing an assertion: expect { throw NSError(domain: "test", code: 0, userInfo: nil) }.toNot(throwAssertion()) // Passes if the code after the precondition check is not run: var reachedPoint1 = false var reachedPoint2 = false expect { reachedPoint1 = true precondition(false, "condition message") reachedPoint2 = true }.to(throwAssertion()) expect(reachedPoint1) == true expect(reachedPoint2) == false
笔记: 此功能仅在Swift中可用。 仅x86_64二进制文件支持它,这意味着您不能在iOS设备上运行此匹配器,只能在模拟器上运行。 支持tvOS模拟器,但使用不同的机制,要求您关闭tvOS方案的“测试”配置的“调试”可执行方案设置。
笔记: