如何使用 Swift 测试框架在单元测试中验证assertionFailure()?

问题描述 投票:0回答:1

我使用

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
框架捕获并验证此行为?如果可以的话我该怎么办?

如有任何见解或建议,我们将不胜感激!

ios swift unit-testing swift-testing
1个回答
0
投票

您的

foo
演示方法甚至无法编译,因为
assertionFailure
只影响调试版本,因此不能保证您的方法始终返回值。

assertionFailure
编写单元测试(与发布版本相比,在调试版本中的行为有所不同)通常没有什么意义。

如果您实际上指的是

predconditionFailure
,它适用于调试和发布版本,那么 Swift 测试目前不支持测试此方法。

preconditionFailure
导致 Mach
EXC_BAD_INSTRUCTION
异常,只能由相应的 Mach 异常处理程序捕获。

除了 Swift 测试之外,您还可以使用 Nimble 来测试

preconditionFailure
调用。

但是,我想指出,在使用

preconditionFailure
调用时应该非常小心,并且使用 Swift 的正常错误处理几乎总是更好。

© www.soinside.com 2019 - 2024. All rights reserved.