【发布时间】:2020-10-28 00:54:12
【问题描述】:
谷歌搜索让我找到了通用的 Swift 错误处理链接,但我有一个更具体的问题。我认为这里的答案是“不,你不走运”,但我想仔细检查一下我是否遗漏了什么。 This 几年前的问题似乎很相似,并且有一些看起来很粗糙的解决方法的答案......我正在寻找最新版本的 Swift 是否可以让一些更优雅的事情成为可能。
情况:我有一个没有用throws标记的函数,使用try!。
目标:我想创建一个单元测试来验证,是的,给这个函数一个错误的东西实际上会失败并抛出一个(运行时/致命)错误。
问题:
- 当我将此函数包装在 do-catch 中时,编译器会警告我无法访问 catch 块。
- 当我运行测试并传入错误参数时,do-catch 不会捕获错误。
-
XCTAssertThrows也没有捕捉到错误。
此函数被构建为与另一个静默失败的函数具有相同的签名,我在模拟器上将它换成这个函数,这样我就可以在测试期间大声失败(无论是自动的还是手动的)。所以我不能把它改成一个 throwing 函数,因为那样的话另一个函数必须被标记为 throwing 并且我希望它静默失败。
那么,有没有办法抛出一个我可以在单元测试中捕获的未处理错误?
或者,我可以在不更改签名的情况下以可测试的方式使此函数爆炸吗?
【问题讨论】:
-
也许这是当前 Swift 设计无法实现的?让我开始赏金,看看我们是否可以获得任何额外的输入。
-
你能显示被测代码吗? (未标记
throws的函数,使用try!。) -
你说:
I want it to fail silently是什么意思?你想让应用程序崩溃吗?还是只是阻止代码执行?
标签: swift error-handling try-catch swift5