不要在XCTAssertThrowsSpecific上停止测试执行

时间:2014-08-06 09:44:39

标签: ios exception xctest

使用XCTest,测试执行以下操作:

XCTAssertThrowsSpecificNamed([does something that breaks], NSException, NSInvalidArgumentException);

我不希望调试器停止在我知道会发生的NSException上但是我希望它仍然停止可能发生的其他异常。

1 个答案:

答案 0 :(得分:0)

基本上我们没有选择权。我仍然认为它是一个xCode错误,因为你已经告诉xCode会抛出一个异常,它将是什么异常。为什么要提供XCTAssertThrows,如果它不是"期待"? 显然,它是你所期望的异常,@ nhgrif认为应该是一个错误,而不是例外。可能是一个好点,但如果这种情况发生,我确实希望我的程序崩溃,因为我无法处理它。

所以真正的问题是更多为什么不禁用该异常的调试器呢?可能是因为他们还没有得到它。我建议向Apple提出错误/功能请求。我喜欢有人在此反驳我(请评论!)但在那之前,我会遇到这个问题(在运行我的所有测试时禁用调试器)。

- > https://stackoverflow.com/a/22393643/1701430

"为什么在抛出执行时测试会停止?" 因为你有一个断点,它会停止执行。

"为什么在删除断点后,我的应用程序在抛出异常时会崩溃?" 因为你有一个未处理的异常。未处理的异常会导致程序崩溃。

"我如何处理异常,以免它导致程序崩溃?" 这个问题的简单答案就是不要抛出异常。在其他编程语言中,如Java,这是完全标准的。但是在Objective-C中,我们并没有真正做到例外。在Objective-C中,应该为TRULY异常行为保存例外。

话虽如此,并强烈建议您找到另一种方法来处理您正在尝试处理的任何内容,这就是您在Objective-C中处理异常的方法:

@try {
    // code that could throw an exception
}

@catch (NSException *e) {
    // handle the exception...
}

@finally {
    // post try-catch code, executed every time
}